gpt4 book ai didi

vb.net - 在 VS Designer 上使用 Form(Of T)

转载 作者:行者123 更新时间:2023-12-02 05:49:16 25 4
gpt4 key购买 nike

我正在使用 vb.net (vs2010)。我正在将一些 winform 移动到 dll 中。我有一个继承自具有一些子项和功能(如测试应用程序)的表单。

我的原始形式是:(.designer)

Partial Class Form1(Of T)
Inherits System.Windows.Forms.Form
....
End Class


Form itself contains code and a toolbar.

我的测试表单是:(.designer)

Partial Class TestForm
Inherits Form1(Of Class1)

当 VS 尝试加载设计器时,我收到“无法创建 Form1`1[T] 的实例,因为 Type.ContainsGenericParameters 为 true”。应用程序可以使用。我可以毫无错误地构建和运行该项目,但我需要向每个新表单添加控件和一些代码。

我尝试了很多方法:

所有示例均适用于 C#,我不知道是否遗漏了某些内容...

这是一个糟糕的设计吗?我知道这是一个 VS 错误,但似乎每个人都通过这些链接修复了它。

编辑:

我正在构建一个 DLL。 Form1 位于此 DLL 上,TestForm 位于新项目中。如果我在同一个项目(也称为 dll)中,这些链接就有效。

谢谢!

最佳答案

Is this a bad design ? I know this is a VS bug

糟糕的设计,不是 VS 的 bug。您尝试做的事情从根本上与 Winforms 设计器的工作方式不兼容。它具有强大的所见即所得支持,设计者创建表单基类的实例并允许该基类中的代码在设计时运行。这就是为什么,例如,您可以设置BackgroundImage属性,并且它会立即在设计器中可见。 Form.OnPaintBackground() 方法绘制它。设计者根本不参与,只是设置属性。

要实现这一点,它必须能够创建基类对象。它不能在你的代码中,它不知道要使用什么样的 T。当您设计 Form1 时,这不是问题,还不需要 T,因为它派生自 Form,并且创建 Form 实例也不是问题。设计 TestForm 时遇到的大问题。

您可能会认为它应该使用 Class1 作为 T。事实并非如此,它可以使用 Reflection 从 TestForm 中发现泛型类型参数的可能性非常低。这需要首先编译类型。这是设计时先有鸡还是先有蛋的问题,TestForm 类是在您设计之后编译的,而不是在设计之前或设计时编译的。

这并不是说你完全不能使用你的方法。它构建并运行得很好。您只能忍受没有 TestForm 设计时支持的情况。这通常会破坏交易,您必须重新考虑您的设计。

关于vb.net - 在 VS Designer 上使用 Form(Of T),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20026739/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com