Задать вопрос
@kuzia_bRatok
Студент

Как во время работы программы менять дизайн окна в форме?

Здравствуйте!

При написании хоть немного сложных приложений возникает необходимость полностью менять дизайн формы. Как это сделать правильно? Нужно ли закрывать текущую форму и тут же вызывать новую с другим дизайном, или правильнее делать все элементы формы невидимыми, рисуя поверх новые? Или есть какие-то другие более подходящие способы?
  • Вопрос задан
  • 545 просмотров
Подписаться 1 Оценить 8 комментариев
Решения вопроса 1
@VZVZ
Reverse-Engineer, Software Developer, Architect
> Ярким примером желаемого -- установщик любого приложения (Installation Wizard)
Ну, лично мне как-то не приходилось делать Wizard'ы, но скажу следующее:

1) Если интерфейс не совсем динамический, а все же шаблонный, то удобнее было бы заранее (в WYSIWYG) сделать много форм на каждый экран визарда и просто менять их.
Но конкретно менять формы (окна) это не очень хорошая идея, незаметно скрыть одно окно и показать другое - сложно (смотрится некрасиво), и еще есть нюансы, это уже особенности ОС.
Я бы посмотрел в сторону композитных контролов (они же юзерконтролы), каждый экран сделал бы отдельным юзерконтролом, и все их на одну форму (как Panelи). При этом редактировал бы их - через отдельные файлы, как если бы это были отдельные формы.
А какой показать, какой скрыть - это уже решать либо экранам, либо форме-контейнеру. Скорее - второе, каждый экран возвращал бы значение по принципу ShowDialog, возвращал форме, а она б уже решала.

2) В винде для визардов есть готовые средства - Property Sheets. Да, это WinAPI, Да, это тот еще гемор. Но все же я бы обязательно изучил их. Может стоит написать для них удобную обертку под .NET. Или хотя бы перенять какие-то интересные решения из них - и воплотить в своих визардах, которые тогда реально станут самыми визардатыми визардами в мире.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
vpuhoff
@vpuhoff
Программист в свободное от работы время
Смотря что именно подразумевается под "дизайном". В идеале все вызовы отрисовки элементов управления "знают" текущий дизайн и при его смене просто отрисовывают уже "новый" дизайн. Ничего закрывать или перезагружать в таком случае не нужно, в лучшем случае достаточно сделать Refresh окна после смены "текущего" на "новый"
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы