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

本文概述

  • 1.检查有问题的类是否确实包含2个类
  • 2.如果还有另一个类, 请将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 #1public class Wow64Interop{[DllImport("Kernel32.Dll", EntryPoint = "Wow64DisableWow64FsRedirection")]public static extern bool DisableWow64FSRedirection(bool disable); }// Class #2public 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 #2public partial class Form1 : Form{public Form1(){InitializeComponent(); }private void Button1_Click(object sender, EventArgs e){MessageBox.Show("Hello"); }}// Class #1public class Wow64Interop{[DllImport("Kernel32.Dll", EntryPoint = "Wow64DisableWow64FsRedirection")]public static extern bool DisableWow64FSRedirection(bool disable); }}

还要注意, 不仅为了方便起见, 而且为了便于维护, 每个类都应放在一个文件中。相同的逻辑适用于其他语言, 例如Visual Basic。
【如何解决Visual Studio Form Render异常(可以设计Form类,但不是文件中的第一类)】编码愉快!

    推荐阅读