![]() |
Модераторы: Partizan, gambit |
![]() ![]() ![]() |
|
Хоббит |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1263 Регистрация: 6.11.2005 Репутация: нет Всего: 1 |
Настройки храняться в файле. Как организовать класс с данными натсройками, чтобы было красивше.
Сделать статический класс, который будет грузить данные из файла, туда же их сохранять при изменении. + доступ из любой точки - не люблю статические классы Или сделать не статический класс, создавать его элемент. запускать функцию типа Load которая будет грузить настройки программы и работать с ними. |
|||
|
||||
Exception |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 4525 Регистрация: 26.12.2004 Репутация: 29 Всего: 186 |
||||
|
||||
Prehistorik |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 146 Регистрация: 30.5.2006 Где: СПб Репутация: 2 Всего: 3 |
Попробуй работать с AppConfig... Там уже всё сделано :-)
--------------------
Есть только один бог - Ассемблер, и С - пророк его. |
|||
|
||||
Хоббит |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1263 Регистрация: 6.11.2005 Репутация: нет Всего: 1 |
вот те раз... пояните что такое System.Comfgi и AppConfig чем они отличаються...
Мне надо хранить настройки программы типа .размеры окон .рабочая директория .настройки видимости контролов. панелей и.т.д... для удобства работы А также надо хоранить данные проектов, которые программа создает (типа файлов) то есть почти теже настройки что и для программы, только отдельные для каждого файла проекта |
|||
|
||||
Pankon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 739 Регистрация: 2.6.2005 Репутация: 3 Всего: 5 |
Вначале вставь app.config
Проект -> Вставить -> Конфиг. файл А потом смотри System.Configuration.ConfigurationManager.AppSettings Это сообщение отредактировал(а) Pankon - 22.6.2006, 17:02 |
|||
|
||||
mr.DUDA |
|
||||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
ИМХО, не катит, потому что хранить нужно информацию динамически изменяемую приложением:
В таких случаях можно либо воспользоваться средствами .NET 2.0 (вроде, специальные конфиги создаются с доп. расширением ".config.user"), либо создав типизированный датасет, сохранять и загружать из него в XML-файл в директории приложения, а уже в датасете (в виде таблиц с полями) хранить хоть какие угодно настройки. Например, добавить табличку "WindowLayouts" с ключевым полем "FormName" и полями "X", "Y", "Width", "Height", "State" и т.п. Датасет можно запихнуть в статик-класс (или синглтон, как кому больше нравится) и делать Load при первом обращении на чтение, а Save - при выходе из приложения. Тогда прочитать или записать любую настройку обязан уже класс-обёртка датасета, а приложение работает с удобным классом конфигурации. -------------------- ![]() |
||||
|
|||||
Hidrag |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 877 Регистрация: 9.4.2005 Где: JDK Репутация: 2 Всего: 25 |
.... а почему про реестр никто не вспомнил или я чего то не понимаю? Разве там не удобно хранить настройки?
-------------------- ![]() |
|||
|
||||
mr.DUDA |
|
|||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
удобно, если только не предполагается copy deployment и наличие настроек по умолчанию -------------------- ![]() |
|||
|
||||
Pankon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 739 Регистрация: 2.6.2005 Репутация: 3 Всего: 5 |
и другие подобние вещи (например, измененный текст в текстбоксе
![]() В дизайнере -> выбрать элемент управления -> Свойства -> Данные -> Установки приложения(ApplicationSettings) -> PropertyBinding -> Вылетает окно (Установки для элемента управления) -> Выбираешь свойство (Size, Text, Location, ...) -> В дропдавн выбираешь нью -> задаешь Name -> Ок Все ![]() Посмотреть все используемые установки Проект -> Свойства -> Установки Здесь, кстати, можно задать уровень "доступа" - Пользователь или Приложение. Студия сама пихает нужные узлы в апп.конфиг (в userSettings) и организует классы для сериализации. ![]() Это сообщение отредактировал(а) Pankon - 23.6.2006, 12:59 |
|||
|
||||
ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 47 Всего: 149 |
Класс, а я и не знал ![]() |
|||
|
||||
Хоббит |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1263 Регистрация: 6.11.2005 Репутация: нет Всего: 1 |
а изменять их как... например надо хранить адресс сервера БД
|
|||
|
||||
ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 47 Всего: 149 |
||||
|
||||
Pankon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 739 Регистрация: 2.6.2005 Репутация: 3 Всего: 5 |
Нет
Это я пытался переводить ![]() Это сообщение отредактировал(а) Pankon - 23.6.2006, 13:50 |
|||
|
||||
mr.DUDA |
|
|||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
Ага, круто конечно. Только есть неудобства: если таким образом привязать размер формы к settings, то в дизайнере изменить размер не получится - при открытии формы, будут восстанавливаться настройки из settings. Другое неудобство: файл "моё_приложение.user.config" располагается в нескольких местах сразу (вот незадача), но только не в папке с приложением. Например, нажав на кнопку "Synchronize" (в окне редактирования setting-ов), получаю приаттаченный мессадж бокс. Это что же выходит, конфиг для приложения лежит в восьми директориях сразу !
![]() З.Ы. так и не получилось привязать размер/позицию формы к сеттингам - просто ничего не сохраняется, и всё. ![]() З.Ы.(2) а то что сделано руками, будет работать как предполагалось... ![]() Присоединённый файл ( Кол-во скачиваний: 82 ) ![]() -------------------- ![]() |
|||
|
||||
Pankon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 739 Регистрация: 2.6.2005 Репутация: 3 Всего: 5 |
Согласен.
, что, кстати, показывает, что сеттинги работают..., и именно поэтому и есть кнопочка "Synchronize". странно, у меня он удаляет только из "одной" директории...(но об этом позже)
![]() как я писал выше добираюсь до окна установок.. и выбираю свойство Location (раз уж размер, так и местоположение тоже потестим), даю имя MyLocation(Score-User), нахожу ClientSize, даю имя для "установки" MyClientSize(Score-User). Все. Запускаю... Меняю размер и местоположение.. Закрываю... Снова запускаю - Ура - Новые установки работают. Дизaйнер. Хм... Остались старые размеры... Хочу снова иметь размеры, как в дизайнере ![]() ![]() ![]() Проект -> Свойства -> Установки -> (Сверху кнопочка ) Синхринизировать(нажимаю) -> окно "Удалить один файл где-то в "C:\Do...\Lokale Einstellungen\Anwendungsdaten\...\WindowsApplication1.vshos_Url_vvqvm5ec15fnt2kctiy1x4zdx2w5ervc\1.0.0.0\user.config" Теперь компилирую.. Из каталога (у меня это) \bin\Release\ запускаю WindowsApplication1.exe. Проверяю.. Все работает ![]() А вот после запуска ехе в "C:\Do...\Lokale Einstellungen\Anwendungsdaten\...\ появился новый (что-то такое я уже сверху предпологал(см.выше)) WindowsApplication1.exe_Url_yqe2yhwgoaqgsrrlwbyhvaqxgzec1nox !!!!, где и хранится 1.0.0.0\user.config для экзешника. А если мы теперь скопируем(или перенесем) наш экзешник (конечно с WindowsApplication1.exe.config) в другое место и запустим, то .. правильно.. появится файл установок для нового местоположения "C:\Do...\Lokale Einstellungen\Anwendungsdaten\...\WindowsApplication1.exe_Url_'вероятно хеш местоположения'\версия сборки\user.config" т.е. Один узер может иметь одно приложение и настройки к нему(одни), а если такая же сборка запускается из другого каталога, то это, извините, "другое" приложение. Ну вот и все кажется. ПС. Если бы я это все знал раньше, ![]() ПС. После компиляции, решил еше раз "синхронизировать".. Пришло сообшение об удалении двух(логично) файлов (дебуг и екзе)... сейчас напишу, только "попью" .. |
|||
|
||||
Pankon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 739 Регистрация: 2.6.2005 Репутация: 3 Всего: 5 |
1. Создаешь в проекте новую "установку" (Проект -> Свойства....) Напимер - "BaseAddr" 2. В программе - для чтения: strAddr = My.Settings.BaseAddr - для сохранения My.Settings.BaseAddr= "121.123.233.233" Все. Неприятность Работает только для виндовсприложения, для консоли - нет ![]() По крайней мере я не смог заставить консоль сохранять результаты.... Консоль вообще не создает файл настроек... ![]() |
|||
|
||||
Хоббит |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1263 Регистрация: 6.11.2005 Репутация: нет Всего: 1 |
Как бы не было смешно, но ничего не работает. Создаю проект. Выбираю в идзайнере форму. В свойсвах ApplicationSetings там PropertyBinding даю имя .. все появляется... запускаю меняю размеры, перезапускаю, все по прежнему...
В свойствах есть ... жму на Синхронизировать no user.config file found Добавлено @ 17:56 и что за обьет My в строчке My.Settings. ... |
|||
|
||||
mr.DUDA |
|
|||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
Это в ихнем бейсике есть такой хитрый фич, "My namespace" называется ![]() То же что и у меня ? -------------------- ![]() |
|||
|
||||
ivashkanet |
|
||||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 47 Всего: 149 |
На VB действительно все пашет. А на C# нет.
Дальше больше. Залез я в дизайнер сеттингов и нашел охриненный метод:
Который, судя по названию, сохраняет изменения сэттингов в... а хрен знает куда он их сохраняет. Потому что даже без файла app.config приложение запоминает свое предыдущее расположение. В C# такого нет ![]() ![]()
И... нифига. Код сеттера отрабатывает, но форма своего положения не помнит ![]() P.S. Прикрепляю приложение VB которое умеет сохранять свое положение на экране. Это сообщение отредактировал(а) ivashkanet - 23.6.2006, 20:17 Присоединённый файл ( Кол-во скачиваний: 17 ) ![]() |
||||
|
|||||
mr.DUDA |
|
|||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
Короче, не продумали до конца, либо нужно где-то дёргать какой-то метод SaveSettings
![]() P.S. не могли уж в деструктор запихать это всё, я не знаю ![]() -------------------- ![]() |
|||
|
||||
Хоббит |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1263 Регистрация: 6.11.2005 Репутация: нет Всего: 1 |
а может в C# надо еще что то ручками дописать ..... если на класс Settings посмотреть так в нем ничего ... пару коментарирве только стоит
вот тут то кажется и надо все делать!!! Добавлено @ 09:12 Какой я умный... вот и решил проблемы... раскоментариваем обработчик SettingsChanging и в нем пишем this.Save() и все работает под C# на самом деле все просто |
|||
|
||||
mr.DUDA |
|
|||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
будешь сохранять в файл при каждом изменении каждой настройки ? ![]() -------------------- ![]() |
|||
|
||||
Хоббит |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1263 Регистрация: 6.11.2005 Репутация: нет Всего: 1 |
ну на произвводительность не влияет ... а хочешь по закрытию пропиши сохранение и все
![]() ![]() ![]() |
|||
|
||||
ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 47 Всего: 149 |
||||
|
||||
Хоббит |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1263 Регистрация: 6.11.2005 Репутация: нет Всего: 1 |
не знаю ... 2 действия расокмнетарить событие (оно в коментариях) и дописать в обработчик строку this.Save() примитивный вариант ...
Можно по закрытию формы. отдельно вызвать Settings.Save(); |
|||
|
||||
ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 47 Всего: 149 |
Я сегодня нашел почему ![]() В свойствах VB проекта есть зампенчательная галка, дословно: "Save My.Settings on Shutdown" Во какая суперфича ![]() Т.е. с C# проекте нужно сохранять их руками ![]() |
|||
|
||||
Rapalex |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 732 Регистрация: 20.1.2006 Где: Украина -> Ник олаев Репутация: 2 Всего: 8 |
Длинный форум я так просмотрел, и не видел у вас такой ссылки, а вы посмотрите!!!
How to Use Settings in Visual C# 2005 -------------------- In vitium ducit culpae fuga. Желание избежать ошибки вовлекает в другую. (Horatius) |
|||
|
||||
Elfet |
|
|||
![]() Белый и Пушистый ![]() ![]() ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 3776 Регистрация: 2.4.2003 Репутация: нет Всего: 16 |
А если я не хочу хранить настройки программы в папке там где и находится программа, а в какой-нибудь другой папке скрытой от пользователей, но всём доступной?
|
|||
|
||||
mr.DUDA |
|
|||
![]() 3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
Тогда ручками сохраняй/читай файл откуда угодно в своём собственном формате. -------------------- ![]() |
|||
|
||||
Azzdorf |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 190 Регистрация: 29.3.2007 Репутация: нет Всего: нет |
тут сериализация подойдет, там можна настройки как захочеш запихнуть, я например привращаю их в пару-значение, или пару - 10 значений и использую те которые нужно, притом в этом файле попрописую после каждого открытия откуда последний раз открывался файл конфигцрации и если его не перемещать то програма в начале не бедт создавать файл из стандартными настройками, если кому надо выложу исходник... --------------------
Иногда шаг вперед - это результат хорошего пинка под зад. |
|||
|
||||
Elfet |
|
|||
![]() Белый и Пушистый ![]() ![]() ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 3776 Регистрация: 2.4.2003 Репутация: нет Всего: 16 |
угу, это всё уже понятно. А вот в какую папку сохранять настройки?
|
|||
|
||||
ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 47 Всего: 149 |
C:/Windows/System32/CriticalData/VeryCriticalData/DoNotModify
![]() Elfet, да где хочешь. Можно, например, использовать C:\Documents and Settings\<UserName>\Application Data\MySuperPuperApp либо C:\Documents and Settings\All Users\Application Data\MySuperPuperApp |
|||
|
||||
Elfet |
|
|||
![]() Белый и Пушистый ![]() ![]() ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 3776 Регистрация: 2.4.2003 Репутация: нет Всего: 16 |
Ок!
![]() |
|||
|
||||
ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 47 Всего: 149 |
Токи шо попробовал:
Application.CommonAppDataPath == C:\Documents and Settings\All Users\Application Data\Enterprise\caTestcs\1.0.0.0 Application.LocalUserAppDataPath == C:\Documents and Settings\<UserName>\Local Settings\Application Data\Enterprise\caTestcs\1.0.0.0 Application.UserAppDataPath == C:\Documents and Settings\<UserName>\Application Data\Enterprise\caTestcs\1.0.0.0 P.S. 'Enterprise' -- хз что, скорее всего производитель. 'caTestcs' -- название проета (или что-то похожее) '1.0.0.0' -- Версия |
|||
|
||||
Elfet |
|
|||
![]() Белый и Пушистый ![]() ![]() ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 3776 Регистрация: 2.4.2003 Репутация: нет Всего: 16 |
ivashkanet, ок! спаибо!
![]() |
|||
|
||||
thomas |
|
|||
![]() Доцент... почти ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1385 Регистрация: 3.10.2006 Где: " Сказочное королевство" Репутация: 6 Всего: 65 |
Приветствую всех.
Несколько раз прочитал всю тему. Плюс в своем тестовом приложении кое что попробовал. В дизайнере settings создал несколько штук, значения оставил пустыми. Предполагается что их внесет пользователь при настройке приложения и далее по ходу пьесы будет менять по мере необходимости. Приложение на "барсике", т.е. использую Me.Settings . Все вроде работает. Созданный студией файл app.config остается без изменений. Настройки сохраняются в файл user.config, расположенный в моей директории. Если в дизайнере запросить синхронизацию, то этот файл удаляется. А теперь у меня "хитрый" вопрос к уважаемому сообществу. А куда будут писаться настройки(какой файл и где сохраняется) введенные пользователем программы, после её установки на другом компе? И почему не вносятся изменения в app.config? ivashkanet, А это
где пишеться? И плюс еще вопрос в догонку: а как во время run time можно записать значения в app.config? Это сообщение отредактировал(а) thomas - 24.7.2007, 07:49 -------------------- Крепко жму горло, искренне ваш Thomas. (С)vingrad Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну! Проблемы негров шерифа не волнуют. |
|||
|
||||
ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 47 Всего: 149 |
А это сташная тайна (во всяком случае я так и не нашел когда искал. Может кому повезет больше ![]() Нигде. Это вычисляет сам .Net. Доступ к этим путям есть из класса Application. |
|||
|
||||
Rapalex |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 732 Регистрация: 20.1.2006 Где: Украина -> Ник олаев Репутация: 2 Всего: 8 |
Привет всем, только что увидел что моя ссылка не решила проблемы.
Сейчас она не доступна, нашел что-то похожее тут Видимо вы ее не прочитали, или не поняли, или не поняли результатов своих опытов. 1 - вы заметили что создаётся конфиг файл с названием экзешника, верно, но настройки пользователя в нем не хранятся. В нём хранятся настройки по умолчанию. И если вам необходимо какойто параметр при редистрибуции изменить, его можно изменить в файле и распространять и при этом НЕ пересобирать сборку. А если этот файл удалить то значения возьмутся непосредственно из сборки, и ничего страшного не произойдёт. 2 - как я уже сказал настройки хранятся не в нём а хранятся они в спецальных XML файла в той самой папке апп дата, для каждого пользователя свои, да ещё с учётом версий проги, да и сохраняются только измененные переметры. Т.е. никаких велосипедов изобретать не надо. -------------------- In vitium ducit culpae fuga. Желание избежать ошибки вовлекает в другую. (Horatius) |
|||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |