Ess*_*ans 5 vb.net inheritance designer visual-studio-2010 winforms
我正在使用vb.net(vs2010).我正在将一些winforms移动到dll.我有一个继承自具有一些子和函数的表单(如测试应用程序).
我的原始表格是:(.designer)
Partial Class Form1(Of T)
Inherits System.Windows.Forms.Form
....
End Class
Form itself contains code and a toolbar.
Run Code Online (Sandbox Code Playgroud)
我的测试表格是:(.designer)
Partial Class TestForm
Inherits Form1(Of Class1)
Run Code Online (Sandbox Code Playgroud)
我得到"无法创建Form1`1 [T]的实例,因为当VS尝试加载设计器时,Type.ContainsGenericParameters为true".应用程序可用.我可以无错误地构建和运行项目,但我需要为每个新表单添加控件和一些代码.
我试过很多方法:
所有的例子都是针对C#的,我不知道我是否遗漏了一些东西......
这是一个糟糕的设计吗?我知道这是一个VS bug,但似乎每个人都通过这些链接修复它.
编辑:
我正在构建一个DLL.Form1在此DLL上,TestForm在新项目中.如果我在同一个项目(也就是dll)中,这些链接有效.
谢谢!
这是一个糟糕的设计吗?我知道这是 VS 的 bug
糟糕的设计,不是 VS 的 bug。您尝试做的事情从根本上与 Winforms 设计器的工作方式不兼容。它具有强大的所见即所得支持,设计者创建表单基类的实例并允许该基类中的代码在设计时运行。这就是为什么,例如,您可以设置BackgroundImage属性,并且它会立即在设计器中可见。Form.OnPaintBackground() 方法绘制它。设计师根本不参与,只是设置属性。
为了实现这一点,它必须能够创建基类对象。它不能在你的代码中,它不知道要使用什么样的 T。当您设计 Form1 时,这不是问题,还不需要 T,因为它派生自 Form,并且创建 Form 实例也不是问题。设计 TestForm 时遇到的大问题。
您可能会认为它应该使用 Class1 作为 T。事实并非如此,它可以使用 Reflection 从 TestForm 中发现泛型类型参数的可能性非常低。这需要首先编译类型。这是设计时的先有鸡还是先有蛋的问题,TestForm 类是在设计之后编译的,而不是在设计之前或设计时编译的。
这并不是说你完全不能使用你的方法。它构建并运行得很好。您只能忍受没有 TestForm 设计时支持的情况。这通常会破坏交易,您必须重新考虑您的设计。
| 归档时间: |
|
| 查看次数: |
867 次 |
| 最近记录: |