【问题标题】:Add generics to form将泛型添加到表单
【发布时间】:2015-10-23 10:37:43
【问题描述】:

当我在 C# 中将泛型类型添加到表单时,会出现类似

的错误

InitializeComponent 在当前上下文中不存在

我的所有组件都一样。

代码如下:

public partial class Form1<T> : Form
{
    public Form1()
    {
        InitializeComponent();
    }
}

【问题讨论】:

  • 请澄清:为什么要在表单中添加泛型类型?
  • 我想知道你想在哪里使用那个 T

标签: c# windows forms winforms generics


【解决方案1】:

首先,Form1 是一个部分类,它存在于多个文件中。

由于您将Form1.cs 文件更改为具有泛型Form1&lt;T&gt;,因此您还需要将相应的Form1.Designer.cs 文件更改为具有泛型类。

否则,C# 编译器会将这两个文件视为包含两个不同的类,一个 Form1&lt;T&gt; 和一个 Form1。虽然它们在技术上具有相同的名称,但它们是不同的。您可以同时声明同名的泛型和非泛型类型。

所以更改两个文件。


现在,话虽如此,您不能拥有通用表单。当您成功让编译器编译代码(进行上述更改)时,您会发现 Visual Studio 中的表单设计器不再对您满意,无法直观地设计表单。

正如该答案的 cmets 中所提到的,如果您可以在没有表单设计器的情况下生活,那么这将不会是一个很好的选择。

但是,如果没有可视化表单设计器就无法解决这个问题,只能删除您最初添加的 Form1 的通用参数。

所以你应该尝试找到一种不同的方式来做你想做的事。

【讨论】:

  • 我想如果 OP 乐于不使用 Visual Studio 设计器,那么拥有通用表单并没有真正的问题。但是,我不建议在没有设计师的情况下尝试处理表单的 gui
【解决方案2】:

InitializeComponent() 是 Visual Studio 为使用可视化设计器创建的表单自动生成的一种方法。此方法位于 your_form_name.Designer.cs 类中,该类是表单的“可视”部分,其中定义了放置在表单上的控件。

您可能只是从以这种方式创建的另一个表单复制粘贴它。如果您的自定义类在您的解决方案中没有像 Form1.Designer.cs 类这样的“可视”部分 - 那么只需从构造函数中删除此方法调用。否则请确保您的“视觉”类部分具有此方法。

【讨论】:

  • 是的,我的班级确实有一个可视化组件,我只是想将一个通用参数传递给一个自动生成的 windows 窗体。
猜你喜欢
  • 2016-07-03
  • 1970-01-01
  • 2010-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多