Windows窗体继承

时间:2009-05-05 19:01:39

标签: c# .net windows winforms inheritance

我想创建一堆具有相同属性的表单,并通过指定构造函数的参数来初始化表单构造函数中的属性。

我尝试创建一个继承自form的类,然后让我的所有表单继承自该类,但我认为因为我无法调用InitializeComponent(),所以我遇到了一些问题。

有关如何执行此操作的C#代码是什么?

3 个答案:

答案 0 :(得分:6)

应该通过让您的构造函数调用InitializeComponent来调用父代base()

public YourFormName() : base()
{
    // ...
}

(您的父表单应该在其构造函数中调用InitializeComponent。您没有把它拿出来,是吗?)

但是,你走下去的道路并不适合与设计师合作,因为你不可能在设计时用这些参数来实例化你的表格(你会必须提供无参数构造函数才能工作)。您还会遇到第二次分配父属性的问题,或者如果您在代码中使用参数化构造函数,则将它们指定为与您可能需要的不同。

坚持只在表单上使用属性而不是使用带参数的构造函数。对于Forms,你会让自己头疼。

答案 1 :(得分:1)

这里继承的替代模式是使用工厂来创建表单。这样您的工厂就可以设置所有属性

答案 2 :(得分:0)

创建一个接口并将其传递给表单的构造函数。

interface IFormInterface
{
      //Define Properties here
}

public MyForm(IFormInterface AClass)
{
      //Set Properties here using AClass
}

虽然我通常做的不仅仅是在我想做这样的事情时设置属性,所以我最终为默认行为创建了一个抽象类。