Как «обойти» вызов конструктора, если экземпляр не нулевой (код конструктора WinForms) - PullRequest
0 голосов
/ 21 октября 2009

Когда мы помещаем компонент в форму Windows, поведение по умолчанию для дизайнера заключается в сериализации вызова конструктора в методе IntializeComponent формы.

Есть ли способ, чтобы пользовательский сериализатор вывел следующий код:

if (componentInstance == null)
   componentInstance = new componentClass();

вместо просто:

componentInstance = new componentClass();

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

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

Спасибо.

1 Ответ

1 голос
/ 21 октября 2009

Это действительно просто - не используйте конструктор форм, чтобы добавить свой компонент в Winform. Вместо этого вручную добавьте переменную-член нужного вам типа компонента в файл базового кода (.cs) и обработайте его непосредственно в коде.

Добавлено в ответ на ваш комментарий

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

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

1011 * т.е. *

CSomeComponentType liveComponent;

...
this.liveComponent = runtimeVariable;
if(this.liveComponent == null)
{
this.liveComponent = this.designTimeComponent;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...