【问题标题】:Make windows form generic使 windows 窗体通用
【发布时间】:2012-07-31 22:05:45
【问题描述】:

在 SO 上发布类似问题一年后。 Generic Windows Form Template

你知道是否有更好的方法来使窗体通用,这就是我想做的:

public partial class EntryPointEditForm<T>  : Form where T : ICriteriaObject<T>
{}

但是抛出一个错误告诉我: 找不到合适的方法来覆盖
关于方法:

protected override void Dispose(bool disposing)

【问题讨论】:

  • @AdamHouldsworth:我相信你是对的,但你的理由是错误的。设计者不需要对泛型参数做任何事情;设计器只使用基类。
  • @Slaks 我的理解(虽然我的记忆模糊,那是前一阵子)是设计试图实例化正在设计的类,但不能因为它没有T,因此通过使用临时解决 T 为强类型似乎可行。
  • @AdamHouldsworth:不。设计者实例化 base 类,然后显式读取InitializeComponent 方法的内容。这就是为什么你可以设计一个抽象的表单类。
  • @Slaks 我明白了,我刚刚重新阅读了我的帖子并得出了相同的结论。我什至在我的帖子中说了这么多,哈哈,只是表明我对这个特定主题的记忆是多么无用——一定是我把它全部写下来的原因。
  • 设法删除了包含我的帖子链接的评论。 Further reading.

标签: c# winforms


【解决方案1】:

您需要将.Designer.cs 文件中的部分类声明也更改为泛型。

但是,我认为 VS 设计器不支持通用表单类。
您可能需要创建一个非泛型抽象表单以供设计器使用,然后创建一个从它继承的泛型类供您实际使用。

【讨论】:

  • 谢谢,它有效。我会在 11 分钟内投票赞成你的问题。
  • @JohnSmith:设计师是否使用了泛型类,或者您是否需要应用我的解决方法?
  • 给我 2 秒,我尝试加载设计器。
  • @Slaks 在这种情况下,除非EntryPointEditForm&lt;T&gt; 用作基类,否则应该没有问题。
  • 设计师使用泛型类加载正常。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-08
  • 2018-08-07
  • 1970-01-01
相关资源
最近更新 更多