Изменить управление winforms во время выполнения - PullRequest
0 голосов
/ 18 октября 2018

Я унаследовал пользовательские элементы управления следующим образом:

ControlBase

| __ControlInherited1

| __ControlInherited2

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

Мне добавили ControlBase в форму, и я хочу изменить его на ControlInherited1 или ControlInherited2 в зависимости от условий выполнения.

Я хотел бы воспользоваться преимуществами наследования, поэтому мне не нужно добавлять разные подпрограммы для каждого унаследованного класса

Я попробовал простой controlBase = new ControlInherited1(); line, но объекты ControlInherited1 не отображаются на форме.

Возможно ли такое визуальное наследование?

1 Ответ

0 голосов
/ 18 октября 2018

Проблема, с которой вы столкнулись, заключается в том, что даже если ваш новый элемент управления наследуется от базового элемента управления, не существует автоматического способа применения существующих свойств к новому, добавляемому вами при вызове controlBase = new ControlInherited1();.По сути, вы потеряете всю информацию об исходном элементе управления при перезаписи исходной переменной, создав новый экземпляр класса ControlInherited1 и установив его в качестве значения controlBase.

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

this.Controls.Remove(controlBase);
this.Controls.Add(newControl);

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...