我一直致力于快速的WinForms计划。我找到了这个关于让ListBox刷新的SO question,我认为Brad Bruce的回答很有意思,虽然我知道绑定是解决问题的正确方法。所以我去尝试继承ListBox
的解决方案并声明了一个类似的类(名称被修改为更容易阅读):
public class AustinListBox : ListBox
{
public void AustinRefreshItems()
{
RefreshItems();
}
}
请注意,在输入此代码之前,我的代码已编译完成并且工作正常。在声明了这个并且没有引用这个新类之后,我去运行程序......并且BAM我被给了一个运行时错误,说2个toolStripButtons(顺便说一下它们是占位符,我没有改变它们,它们不是在任何地方使用)无法加载他们的图像。然而,默认图像位于Form1.resx中,就像以前一样。它也不会让我看到Form1的设计。
在运行时,未使用的类声明与两个默认的toolStripbutton图像有什么关系?如果我注释掉AustinListBox
代码的7行,那么一切都会神奇地再次发挥作用。
答案 0 :(得分:2)
它也不会让我查看Form1的设计。
表单设计者要求所设计的表单是文件中定义的第一个类。如果将类定义放在包含表单类的代码文件的顶部,则设计人员将无法工作。
为什么运行时错误?编译器生成包含StatusStrip按钮图像的资源文件。似乎在表单类之前放置一个类会阻止这些资源链接到程序集中,因此资源加载程序在运行时查找这些图像资源时会抛出异常。
只需将类定义放在表单定义下面,在表单定义(如果适用)中,或者放在单独的文件中。后者是公共课程普遍接受的最佳做法。
在这种情况下,由于您的类是Component的子类,因此您应将其放在单独的文件中。执行此操作时,解决方案资源管理器中将显示一个不同的图标,表示它为组件。它还将获得自己的.resx文件,您可以使用设计器向其中添加其他组件。