WinForms 设计器异常

标签 winforms windows-forms-designer

当我尝试在设计模式下显示包含 UserControl 的 WinForms 表单时,它会引发异常,但在运行或调试程序时可以正常运行。

设计师说:

The variable 'fpInfoA' is either undeclared or was never assigned.
ResearchTool fMain.Designer.cs Line:282 Column:1 Call Stack
at System.ComponentModel.Design.Serialization.CodeDomSerializerBase.Error(IDesignerSerializationManager manager, String exceptionText, String helpLink) at System.ComponentModel.Design.Serialization.CodeDomSerializerBase.DeserializeExpression(IDesignerSerializationManager manager, String name, CodeExpression expression) at System.ComponentModel.Design.Serialization.CodeDomSerializerBase.DeserializeExpression(IDesignerSerializationManager manager, String name, CodeExpression expression) at System.ComponentModel.Design.Serialization.CodeDomSerializerBase.DeserializeStatement(IDesignerSerializationManager manager, CodeStatement statement)

但是,看起来该变量已按照我在 InitializeComponent 中的预期进行了分配

private void InitializeComponent()
{
    // ... (Order of statements is same as in actual code) ...
    this.tpFpA = new System.Windows.Forms.TabPage();
    this.fpInfoA = new ResearchTool.FPInfo();
    // ...
    this.tpFpA.Controls.Add(this.fpInfoA); // THIS LINE BLOWS UP IN DESIGN MODE
}

关于如何追踪这个问题的想法?例如,有没有办法调试设计器的初始化?

最佳答案

如果您无法解决问题,一种解决方法是通过检查 DesignMode 来包围有问题的代码位。

如:

private void InitializeComponent()
{
    ...
    if(!DesignMode)
    {
        this.fpInfoA = new ResearchTool.FPInfo();
    }
    ...
}

如果它正在执行设计模式中不需要的操作并且速度相当慢,例如连接到数据库或类似操作,这也可以稍微加快速度。

关于WinForms 设计器异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7082009/

相关文章:

c# - 富文本框在写入新数据时滚动到底部

c# - 加入用户控件的两个字符串属性(firstName + lastName)并将其分配给标签

c# - MDI 优点和缺点

c# - VS Designer中的自定义控件: Avoid serialization of Collection properties

c# - 如何在另一个窗体窗体中显示图形

.net - 使用 "default proxy"时,用户名/密码从何而来?

c# - 更改 MonthCaender 控件的语言

c# - windows窗体如何在文本框的右侧或左侧添加图标

c# - 如何将列标题文本左对齐 Datagridview Windows 窗体 C#

c# - 当我创建继承自 Form 的新类时,Visual Studio 会更改设计器生成的代码