当我尝试在设计模式下显示包含 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/