2015-10-23 68 views
1

当我添加一个泛型类型在C#中的形式,我得到这样加入仿制药形成

的InitializeComponent错误并不在当前的背景下

与同为我所有的组件存在。

下面是代码:

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

请澄清一下:为什么要添加一个泛型类型到您的表单? –

+0

我想知道你想在哪里使用T –

回答

0

InitializeComponent()是Visual工作室用于使用可视化设计创建的形式自动生成的方法。该方法位于your_form_name.Designer.cs类中,该类是窗体的“可视化”部分,其中控件放置在窗体上。

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

+0

是的,我的类有一个可视化组件,我只是想将一个通用参数传递给一个自动生成的窗体。 – Virus7711

3

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

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

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

所以改变这两个文件。


现在,说了那么,你不能有通用的形式。当您成功获得编译器编译代码(通过上述更改)时,您会发现Visual Studio中的表单设计器不再满意您,并且无法直观地设计该表单。

正如在这个答案的评论中提到的,如果你可以没有表单设计师的生活,那么这不会是一个showstopper。

但是,如果你不能没有视觉表单设计师,那么这是无法修复的,除非要删除首先添加的Form1的通用参数。

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

+1

我想如果OP很高兴不要使用Visual Studio设计器,那么在使用通用表单时就不存在真正的问题。我不会建议在没有设计师的情况下尝试处理表单的gui,但 – Sayse

+1

我同意,我已经编辑了该效果的答案。 –