Создание диалога с опциями
Т.е. будет tree view, при клике на итем которого будет динамически формироваться список контролов, раскидается по форме и заполниться соответствующими данными.
Кто-нибудь делал что-то подобное? Или знает где можно посмотреть описание как это делается?
Проще, кстати, не создавать контролы динамически, а разместить их на другом контроле (скажем, в CBuider это Panel), который можно скрывать/показывать по клику.
Или используйте вкладки
2)Проблема - как сделать все это пороще.
3)Сейчас предполагаю что будет работать так.
В структуре GameOptions реализован метод ShowDialog.
При его вызове появляется форма. Форма уже готовая. На ней будут 4 статических компонента: OK, Cancel, TreeView, Label с Description.
При клике на итем формируется страница - метод CreateOptionLevel(string name) - где name имя страницы - соотвествует названию итема в TreeView.
Внутри CreateOptionLevel будет вызов FillLevel() в котором заполним контолоы страницы соотвествующими данными.
При создании новой страницы непонятно как сохранить изменения сделанные в контролах предыдущей страницы. Как определить какая страница была до этого?
Вообще хочется как упростить архитектуру. Не очень понятно и удобно для изменения. Есть какие-нибудь предложения?
Как я понимаю это более-менее стандартная задача.
На чем пишите? Что используете?
Появилась идея сделать так, чтобы CreateOptionLevel возвращала Panel с уже настроенными контролами. Эту панель кидаю на форме на соответствующий клик на три вайве.
Соотвественно упрощается идея сохранения изменеий. Позову SaveOptions(string name, Panel panelOptions) - где name - имя страницы опций, panelOptions - панель на которой все это лежит.
Ваши мысли?
Цитата: MixerLosev
Пишу на C#.
Появилась идея сделать так, чтобы CreateOptionLevel возвращала Panel с уже настроенными контролами. Эту панель кидаю на форме на соответствующий клик на три вайве.
Соотвественно упрощается идея сохранения изменеий. Позову SaveOptions(string name, Panel panelOptions) - где name - имя страницы опций, panelOptions - панель на которой все это лежит.
Ваши мысли?
Появилась идея сделать так, чтобы CreateOptionLevel возвращала Panel с уже настроенными контролами. Эту панель кидаю на форме на соответствующий клик на три вайве.
Соотвественно упрощается идея сохранения изменеий. Позову SaveOptions(string name, Panel panelOptions) - где name - имя страницы опций, panelOptions - панель на которой все это лежит.
Ваши мысли?
В принципе почти тоже самое вам и предлагал Нездешний.
Цитата: MixerLosev
клик на три вайве.
Долго втыкал, где вы собираетесь кликать :)
Не встречал ли кто где - нибудь подобную реализацию.
Хочется посмотреть исходники(можно на java, C++, Pascal, C#).
Киньте ссылку.
Друг мой, а вы уверены, что при наличии трёх десятков вкладок или страниц пользователь не запутается, где что настраивается?
Я взял за за основу диалог Tools | Options в VS2005.
Придя домой, да громыхая дверию подъездной, дабы духов злых распугати, прошествуем к алтарю с электронным демоном в жужжащей темнице. Оседлаем демона, да проследуем на сайт какой, бесовским делом - гаданием промышляющий.
Вопросим строго у демона: "Предложите как сделать проще. Я взял за за основу диалог Tools | Options в VS2005!" Созданье тупое может в ответ тебе ум смутить вопросом: "А что же сделать хотите, господин. Да цель кака же?!" Не поддадимся в заблужденье явному введенью и рявкнем на него грозно: "Отвечай сей же миг! Ишь чего удумал, увиливать!"
И выдаст расклад нам покорно железка:
Что было? - Иди туда да сваяй незнамо что заданье дадено
Сей миг что? - Возводит вдохновенно проектер три по десять раз страничек разных, да свойствами заполненных, дабы людям сделать благодеянье великое - под себя чтоб каждый настроить мог
Что будет? - Не оценят скоты неблагодарные проектера труды великие, поломают ноги в тьме свойств и страничек и предадут забвенью сей продукт программный
Чем сердце успокоится? - Разраба сменить бы надобно иль проектера
Да отпустим же на том демона на покой, дабы отдохнула железка
Но все- таки если есть какие-то мысли и идеи, то пиши попроще.
Сообственно по теме(может кому пригодиться):
сделал интерфейс и и какждая группа опций реализует этот интерфейс.
interface IOptionsVisualizer
{
Panel CreateOptionsLevel(string name);
IOptionsVisualizer GetChangesFromOptionsLevel(Panel panel)
}
При переходе на другую страницу опций сначало сохраняю изменения с предыдущей страницы, а потом создаю новую. Если нажали ок - изменения применяютяс.