个性化阅读
专注于IT技术分析

如何解决Visual Studio Form Render异常:可以设计Form类,但不是文件中的第一类

本文概述

有时, 当你处理代码时, 可能不会注意到某些操作可能会损坏项目的另一个区域。懒惰的开发人员通常在单个文件中声明多个类时, 通常会遇到此异常。问题是当你添加文件的多个类时, 该类包含扩展.net的Form类的类(它将在设计器中呈现), 因此, 当文件的第一个类不是扩展Form类的类时, 渲染器将失败。

在本文中, 我们将轻松向你说明如何在渲染器中修复此异常。

1.检查有问题的类是否确实包含2个类

由于单个文件中存在2个类, 因此基本上如上所述触发该错误, 例如, 以下文件Form1.cs在同一名称空间内包含2个类:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Runtime.InteropServices;

namespace Sandbox
{
    // Class #1
    public class Wow64Interop
    {
        [DllImport("Kernel32.Dll", EntryPoint = "Wow64DisableWow64FsRedirection")]
        public static extern bool DisableWow64FSRedirection(bool disable);
    }

    // Class #2
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Button1_Click(object sender, EventArgs e)
        {
            MessageBox.Show("Hello");
        }
    } 
}

Windows的窗体渲染器将始终采用文件中的第一类来渲染窗体。在本例中, 你可以找到的第一个类是Wow64Interop类, 渲染器将抛出异常, 因为它无法渲染不扩展.NET的Form类的类。

2.如果还有另一个类, 请将Form类设置为第一个

要解决此问题, 只需更改文件中类的顺序, 例如:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Runtime.InteropServices;

namespace Sandbox
{
    // Class #2
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Button1_Click(object sender, EventArgs e)
        {
            MessageBox.Show("Hello");
        }
    }

    // Class #1
    public class Wow64Interop
    {
        [DllImport("Kernel32.Dll", EntryPoint = "Wow64DisableWow64FsRedirection")]
        public static extern bool DisableWow64FSRedirection(bool disable);
    }
}

还要注意, 不仅为了方便起见, 而且为了便于维护, 每个类都应放在一个文件中。相同的逻辑适用于其他语言, 例如Visual Basic。

编码愉快!

赞(0)
未经允许不得转载:srcmini » 如何解决Visual Studio Form Render异常:可以设计Form类,但不是文件中的第一类

评论 抢沙发

评论前必须登录!