Наследование формы Windows - PullRequest
5 голосов
/ 05 мая 2009

Я хочу создать группу форм, которые имеют одинаковые свойства, и инициализировать свойства в конструкторе форм, назначив параметры конструктора.

Я пытался создать класс, который наследовал от формы, а затем все мои формы наследовали от этого класса, но я думаю, что, поскольку я не мог вызвать InitializeComponent (), у меня возникли некоторые проблемы.

Что такое код C # о том, как это сделать?

Ответы [ 3 ]

6 голосов
/ 05 мая 2009

Родительский InitializeComponent должен быть вызван вызовом вашего конструктора base() следующим образом:

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

(Ваша родительская форма должна иметь в своем конструкторе вызов InitializeComponent. Вы не взяли это, не так ли?)

Однако путь, по которому вы идете, не очень подходит для дизайнера, так как вы не сможете получить его для создания экземпляра вашей формы во время разработки с этими параметрами ( должен обеспечить конструктор без параметров для его работы). Вы также столкнетесь с проблемами, когда он назначает родительские свойства во второй раз или назначает их отличающимися от тех, которые вы могли бы хотеть, если бы вы использовали в параметре конструктор с параметрами.

Придерживайтесь только наличия свойств в форме, а не использования конструктора с параметрами. Для форм у вас будет головная боль.

1 голос
/ 05 мая 2009

В качестве альтернативы наследования здесь можно использовать фабрику для создания форм. Таким образом, ваша фабрика может установить все свойства

0 голосов
/ 05 мая 2009

Создайте интерфейс и передайте его в конструктор формы.

interface IFormInterface
{
      //Define Properties here
}

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

Хотя обычно я делаю больше, чем просто устанавливаю свойства, когда хочу сделать что-то подобное, поэтому я в итоге создаю абстрактный класс для поведения по умолчанию.

...