Пользовательская управляющая переменная VB.Net Winforms

Я использую VS 2005 в приложении VB.Net WinForms. У меня есть настраиваемый пользовательский элемент управления, который требует, чтобы переменная правильно отображала данные. У меня вопрос: как лучше всего потребовать, чтобы вызывающая подпрограмма заполняла переменную? Я подумал о нескольких вариантах:

  • Имейте свойство WriteOnly и проверьте, имеет ли оно значение «Nothing», когда пользовательский элемент управления загружен, и вызовите исключение, если это так. Мне это не нравится, потому что ошибка будет во время выполнения, и я хотел бы, чтобы переменная заполнялась во время разработки (например, передача параметров в подфункцию).

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

Каковы ваши предложения по заполнению обязательной переменной, которая нужна пользовательскому элементу управления во время разработки?

Заранее спасибо.


person OneSource    schedule 14.02.2009    source источник


Ответы (3)


Добавить переменную в качестве параметра во все общедоступные конструкторы элемента управления?

person Joel Coehoorn    schedule 14.02.2009
comment
Часто это сложно сделать с WinForms, поскольку дизайнер может раздражаться, если вы не предоставите конструктор по умолчанию. - person JaredPar; 15.02.2009
comment
Джоэл, спасибо за ответ. Это привело меня к решению передачи переменной в подпрограмме Public Sub New пользовательского элемента управления, и это работает. - person OneSource; 15.02.2009
comment
Вы можете иметь конструктор по умолчанию и использовать атрибуты, чтобы затруднить вызов вне дизайнера. - person Joel Coehoorn; 15.02.2009

Я несколько раз шел по этому пути с настраиваемыми элементами управления и пришел к одной истине

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

Слишком много случаев, когда вы попадете в такую ​​ситуацию. Основным примером является конструктор WinForm. Как только вы перетащите элемент управления на хост, WinForms создаст его экземпляр и отобразит его в процессе VS. По умолчанию он не передает никаких переменных в конструктор, и, следовательно, начальный рендеринг будет происходить без каких-либо заданных вами свойств.

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

person JaredPar    schedule 14.02.2009
comment
Джаред, спасибо, что поделился своими мыслями. Это хорошая информация, которую стоит знать на будущее. - person OneSource; 15.02.2009

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

person Anonymouse    schedule 12.11.2009