本文概述
有时, 当你处理代码时, 可能不会注意到某些操作可能会损坏项目的另一个区域。懒惰的开发人员通常在单个文件中声明多个类时, 通常会遇到此异常。问题是当你添加文件的多个类时, 该类包含扩展.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。
编码愉快!
评论前必须登录!
注册