此之前已经多次发生过没有初始化,但我从来没有费心去搞清楚为什么,现在我累了:自定义用户控件中自动生成的代码
举例来说,我得到从RichTextBox中类或面板,我重建我的项目,将类添加到VS设计器工具箱,然后我拖动自定义用户控件到窗体。一切工作正常,我可以运行我的项目...
当我通过设计器编辑窗体或自定义用户控件的属性时,问题出现了。有时候,设计师会从代码隐藏中删除初始化行,导致设计器和可执行文件中出现异常,因为控件仍未初始化。
换句话说,下面一行是从说,Form1.Designer.cs删除:
this.customRichTextBox1=new CustomRichTextBox();
没有其他线从代码隐藏去除,所以自定义控件的属性仍设置,尽管变量保持未初始化。
我的解决方案一直是在设计器后台代码中手动初始化我的用户控件,但设计师最终再次将其删除。
我相信当我通过设计器构建一个自定义用户控件时不会发生这种情况(但我不完全确定这一点)。只有当我手动定义类似以下内容时才会发生:
class CustomRichTextBox:RichTextBox{}
这太令人讨厌了。我究竟做错了什么?
作为@Cody请求,这里是重现问题的步骤。我使用的是VS2010,但自2005年以来我就遇到了这个问题,我想。
步骤1.创建新的Windows窗体应用程序,任何框架
第2步:添加下面主窗体类以下类:(碰巧,这是导致我这个问题,本次的控制。 )
class CustomRichTextBox : RichTextBox
{
Timer tt = new Timer();
internal CustomRichTextBox()
{
tt.Tick += new EventHandler(tt_Tick);
tt.Interval = 200;
}
protected override void OnTextChanged(EventArgs e)
{
tt.Stop();
tt.Start();
}
void tt_Tick(object sender, EventArgs e)
{
System.Diagnostics.Trace.WriteLine("Hello world!");
}
}
第3步。按F6重建。
第4步。通过从工具箱中拖放,将CustomRichTextBox控件添加到窗体中。
第5步。如果你愿意,你可以按F5来测试应用程序,但它应该工作。关闭运行的应用程序。
第6步。按F6重建,此时,设计人员应该崩溃并显示以下消息:“变量'customRichTextBox1'是未声明的或从未分配的。” (在一种情况下,整个VS完全崩溃,但错误通常包含在设计器中。)
第7步。要纠正问题,请进入代码隐藏并初始化变量,但下次重新构建,初始化线将消失。
几天前发布了类似的问题,但他们的问题和您的问题都没有提供足够的代码来实际重现问题。我花了很多时间开发自定义控件库并使用VS Designer,我从未见过这种情况。我并不否认这发生在你身上,但如果我自己无法再现问题,我无法帮助你找到解决方案。设计师有时候很古怪,但并不完全不可救药。 – 2011-04-16 06:10:04
@Cody:感谢您的评论。我测试并添加了重现问题的步骤。我希望你能重现它。你是对的,设计师是一个非常强大的工具,它很少给我带来麻烦。我会说这是唯一一个我必须与之战斗的实例......我相信这个问题与我通过自己输入课程来创建控制的方式有关。 – 2011-04-16 06:36:23