| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Разработка Windows Forms > Как хранить и передавать настройки между формами? |
| Автор: graham 10.8.2009, 15:41 |
| 1. код на C++\CLI 2. структура программы: а) две формы, предположим Form1 и Form2, каждая имеет свой заголовочник и собрана в дизайнере; б) заголовочники подключил к исполняемому .cpp 3. суть программы: Form1 - главная форма, отображает какие-то данные и содержит кнопку - обработчик в зависимости от выбранных настроек на Form2 должен сделать вычисления. Form2 вызывается из меню Form1 через ShowDialog(). На Form2 находятся последние настройки программы. Настройки установленные в Form2 надо сохранять в .ini и считывають оттуда, чтобы их не вводить заново при каждом запуске программы. Не могу реализовать что-то вроде общего контейнера для Form1 и Form2, в который бы кидал все данные из полей Form2, а в Form1 мог их считать и использовать в процедурах для сохранения\чтения настроек и в зависимости от настроек обработка данных по нажатию кнопки. Пробовал реализовать через глобальный static ref class, в итоге получилось добраться до него из Form1, но он почему-то оказался недоступен из Form2. Пробовал сделать поля public, тоже не получилось, но таким способом реализовать не хочу, поэтому не стал разбираться в нем. Со static ref class разбирался, но самостоятельно так и не получилось :( Может есть какое-то стандартное решение для этой задачи? |
| Автор: Heinzz 10.8.2009, 16:03 | ||||
Можно так
а это форма 2
Поле result -- любое по вкусу, можно записать свою структуру с настройками (удобнее будет сериализовать в файл) |
| Автор: graham 11.8.2009, 11:44 |
| Спасибо, но это всетаки не то. Настроек планируется сделать много. Получается у меня сейчас есть класс Form1, Form2 и класс Globals. Где и как создать экземпляр Globals чтобы к нему можно было обращаться из Form1 и Form2, а в будущем и из других форм? Аналогичный метод понадобится для локализации меню, если конечно нет другого... |
| Автор: jonie 11.8.2009, 11:54 |
| делайте структуру или класс и передавайте ссылку на него в форму2, где и работайте с ней. А для компонентов используйте binding свойств на экземпляр этой структуры\класса |
| Автор: math64 11.8.2009, 16:09 | ||
|
| Автор: graham 11.8.2009, 17:14 |
| jonie, а есть способ без передачи форме класса\структуры опций? Хочу сделать чтобы была область памяти в оперативке типа глобальных переменных для всего проекта. Думал сделать через файл, но постоянно читать-писать на винт не разумно. Добавлено @ 17:17 math64, тут самое сложное(на что не могу найти ответа), где этот класс объявить и как сделать чтобы он был виден и в Form1 и в Form2? |
| Автор: graham 11.8.2009, 21:30 | ||
Хорошо, если так, то сделаю через передачу в формы. Но можно какой-нибудь материал в подтверждение, что это нехорошо? |
| Автор: math64 12.8.2009, 09:16 | ||||||
Например, появляется Form3, которой тоже нужны аналогичные настройки, но их значения не будут совпадать с настройками Form1 и будут сохраняться в другом .ini или в другой секции. В таком случае не нужно будет создавать Form4, почти идентичную Form2, а использовать Form2 непосредственно. Класс Settings лучше разместить в отдельном файле,
но можно внутри Form2.
|
| Автор: IGV 12.8.2009, 09:36 |
| graham, я бы в данном случае использовал Settings.settings. вот http://www.rsdn.ru/article/dotnet/dnetappcfg.xml |
| Автор: graham 13.8.2009, 13:21 |
| Спасибо, похоже, все что мне нужно это паттерн Singletone. Пока не могу в нем разобраться т.к. "плаваю" в ООП. Но уже есть стимул и направление. |
| Автор: graham 31.8.2009, 21:15 |
| объявил класс Settings в первой форме и передал ее при вызове второй форме в конструктор и все заработало, спасибо. |