添加泛型以形成

时间:2015-10-23 10:37:43

标签: c# windows forms winforms generics

当我在C#中向表单添加泛型类型时,我会收到类似

的错误
  

InitializeComponent在当前上下文中不存在

和我所有组件的相同。

以下是代码:

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

2 个答案:

答案 0 :(得分:3)

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

由于您已将Form1.cs文件更改为通用Form1<T>,因此您还需要更改相应的Form1.Designer.cs文件以使其具有通用类。

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

所以改变这两个文件。

现在,话说回来,你不能拥有通用表格。当您成功地使编译器编译代码(使用上述更改)时,您会发现Visual Studio中的表单设计器不再满意您,并且无法在视觉上设计表单。

正如对此答案的评论中所提到的,如果您可以在没有表单设计器的情况下生活,那么这将不是一个显示器。

但是,如果没有可视化表单设计器就无法生存,那么除了将通用参数删除到您首先添加的Form1之外,无法修复此问题。

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

答案 1 :(得分:0)

InitializeComponent()是Visual Studio为使用可视化设计器创建的表单自动生成的方法。此方法位于your_form_name.Designer.cs类中,即&#34; visual&#34;表单的一部分,其中控件放置在表单上。

可能您只是从以这种方式创建的另一个表单中复制粘贴它。如果您的自定义类没有&#34; visual&#34;部分类似于解决方案中的Form1.Designer.cs类 - 然后只是从构造函数中删除此方法调用。否则请确保您的&#34; visual&#34; class part有这个方法。