Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Разработка Windows Forms > Связь элементов меню с тулбаром


Автор: KelTron 28.5.2007, 05:36
Привет всем, у меня тут такая проблема: я создаю меню и тулбар - они полностью копируют друг друга по функциям (ну как обычно), ну к соответствующим элементам этих меню я подрубаю одни и те же обработчики - все как надо, но у меня есть такие пункты меню, которые можно делать Cheked и я хочу чтобы при нажатии допустим на кнопку на тулбаре соответствующий пункт меню также становился Cheked - тупо прописывать в обработчиках Cheked = true/false как то некрасиво, и еще как сделатьтак чтобы выбранные мной кнопки на тулбаре и соответственно меню работали как радио батоны, а то опять же приходится прописывать везде Cheked. Я знаю есть нормальный способ это сделать, пытался разбираться со свойством Merged(вроде так называется), но в МСДН че то не нашел ниче путнего. Подскажите, пожалуйста как быть.

Автор: KelTron 5.6.2007, 07:30
Попробую по другому написать

1) Создаю главное меню (MenuStrip), создаю тулбар. Допустим в главном меню есть пункт у которого стоит свойство CheckOnClick=true, в тулбаре есть кнопка с таким же свойством. Как сделать так, чтобы при выборе этого пункта меню(из главного меню) кнопка на тулбаре тоже активировалась. Причем не прописывая в обработчике события OnClick ничего.

2) Допустим у меня есть тулбар, на нем 3 кнопки. Как сделать так, чтобы они работали как радио батоны по отношению друг к другу. И тоже без прописываний в обработчике OnClick.

Если все прописывать в обработчике, то количесво кода возрастает с количеством кнопок, что не есть хорошо.

Надеюсь, что сейчас понятно в чем у меня проблема

Заранее спасибо за помощь

Автор: SpaceSpace 5.6.2007, 07:57
Низя, только если будешь вешать обработчики свои.
А конролировать кнопки можно централизованно - раз подписал обработчик, а он уже сам все пробегает и отмечает что нужно

Автор: archeg 5.6.2007, 10:03
Почитай про паттерн "команда"

Например тут: http://www.rsdn.ru/article/patterns/patterncommand.xml

Автор: KelTron 5.6.2007, 17:50
Цитата(SpaceSpace @  5.6.2007,  07:57 Найти цитируемый пост)
А конролировать кнопки можно централизованно - раз подписал обработчик, а он уже сам все пробегает и отмечает что нужно

Это ты про случай с таймером?
Если да, то у меня вопрос а не нагружает ли систему постоянная проверка в таймере, допустим 10 раз в секунду?

archeg, не думал что все так сложно, по моему даже в MFC было с этим делом проще
Ну на первый вопрос я ответ получил, теперь понятно, что не все так просто.
archeg++

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

Автор: SpaceSpace 6.6.2007, 08:44
Цитата

А вот по поводу второго меня беспокоит, что если прописать обработчики

не обработчики, а 
один обработчик.
вешаеш его одного на все твои кнопки.
В нем, централизованная логика для всего тулбара.
Ясна?

Автор: KelTron 7.6.2007, 06:06
Цитата(SpaceSpace @  6.6.2007,  08:44 Найти цитируемый пост)
Ясна?


Да все ясно, че то я протупил маленько, спасибо

Автор: archeg 7.6.2007, 16:10
Цитата(KelTron @  5.6.2007,  17:50 Найти цитируемый пост)
archeg, не думал что все так сложно, по моему даже в MFC было с этим делом прощеНу на первый вопрос я ответ получил, теперь понятно, что не все так просто.

Тут нету ничего сложного - можно как-то написать очень-очень тупо, такой вариант может казаться очень легким - на самом деле это не так. Когда прийдет время рефакторинга, в коде будет легко запутатся. Если же использовать паттерн - никогда не запутаешся smile  Да и проблемы отпадут сами собой.

P.S. Как сказано в статье, этот паттерн резонно использовать только для довольно больших приложений. Если же приложение маленькое - наверное можно сделать тупо  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)