c # winforms общение между пользовательскими элементами управления - PullRequest
1 голос
/ 17 мая 2011

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

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

Проблема в том, что я не уверен в наилучшем способе связи между элементами управления и основной формой. Например. Допустим, у меня есть приложение для редактирования типа рисования формы. Там есть основная форма и пользовательский элемент управления, который рисует объекты. Основная форма содержит объекты. И пользователь может выбрать объекты для редактирования, и выбранный объект должен быть выделен. Таким образом, каждый раз, когда выбор изменяется, главная форма должна сообщить элементу управления отображением, какой объект теперь выбран. Представьте, если бы у меня было несколько пользовательских элементов управления, которым нужно было знать информацию о состоянии в основной форме. Каждый раз, когда что-то менялось, мне приходилось вызывать функции во всех элементах управления, чтобы позволить им обновляться. Таким образом, в дополнение к основной форме, в которой хранится ссылка на выбранный объект, все элементы управления также хранят его. И я должен убедиться, что они все обновлены.

Другая проблема, с которой я столкнулся, заключается в том, что у меня есть пользовательский элемент управления, который позволяет вам устанавливать свойства таких объектов, как размер или цвет. Чтобы основная форма знала, что свойство изменилось, мне нужно настраиваемое событие для каждого изменяемого параметра, а затем вызывать эти события всякий раз, когда изменяется текстовое поле или флажок, и возвращать значение обратно. Это кажется большой дополнительной работой. Если бы все было в главной форме, было бы намного проще. Но тогда основной класс формы будет миллион строк.

Я поступаю неправильно?

Ответы [ 2 ]

3 голосов
/ 17 мая 2011

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

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

1 голос
/ 17 мая 2011

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

Если вы хотите, чтобы основная форма знала об изменении свойств объектов, вы можете реализовать интерфейс INotifyPropertyChanged на своих объектах.Смотри здесь .

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