Winforms - динамическая загрузка / сохранение настроек - PullRequest
1 голос
/ 14 октября 2008

У меня есть «файл настроек» в моем приложении Winforms под названием Settings.settings с частичным классом для пользовательских методов и т. Д. Есть ли способ загрузки / сохранения динамических настроек на основе произвольных ключей?

Например, в моем приложении есть несколько ListViews, в которых я хочу сохранить / загрузить ширину столбцов; Вместо того, чтобы создавать настройку ширины для каждого столбца для каждого представления списка, я бы хотел простой метод для загрузки / сохранения ширины автоматически.

Ниже приведен пример метода save , который я пробовал:

internal sealed partial class Settings
{
    public void SetListViewColumnWidths(ListView listView)
    {
        String baseKey = listView.Name;
        foreach (ColumnHeader h in listView.Columns)
        {
            String key = String.Format("{0}-{1}", baseKey, h.Index);
            this[key] = h.Width;
        }
    }
}

При запуске этого кода я получаю сообщение об ошибке "Свойство настроек 'TestsListView-0' не найдено." Что-то мне не хватает?

Ответы [ 3 ]

1 голос
/ 17 октября 2008

Сохраните настройки ширины столбца в сериализуемом объекте Xml. То есть что-то, что реализует IXmlSerializable , а затем создает отдельную запись настройки этого типа в Settings.settings.

Хорошим вариантом, вероятно, будет Сериализуемый словарь Xml. В быстром поиске Google было найдено несколько постов в блоге, в которых описывается, как это реализовать.

Как уже упоминалось в других ответах, вам необходимо убедиться, что этот объект является настройкой пользователя. Вам также может понадобиться инициализировать экземпляр настройки. Т.е. создайте экземпляр XmlSerializableDictionary () и назначьте его параметру, если он равен нулю. Подсистема настроек не создает экземпляры по умолчанию сложных объектов настроек.

Кроме того, если вы хотите, чтобы эти настройки сохранялись между версиями сборки (т. Е. Быть обновляемыми), вам необходимо обновить настройки при запуске приложения. Это подробно описано в блоге Михи Маркича и в блоге Рагхавендры Прабху .

0 голосов
/ 14 октября 2008

Вы можете использовать Settings.Save () или аналогичные для пользовательских настроек, но имейте в виду, что такие настройки НЕ будут сохранены в файле xxx.exe.config в каталоге приложения, как вы ожидаете. На самом деле они находятся где-то глубоко внутри папки пользователя (найдите на вашем диске файл xxx.exe.config, чтобы найти его). В следующий раз, когда вы вручную измените xxx.exe.config в каталоге вашего приложения, это изменение не будет применено таинственным образом (система все еще использует сохраненный файл из пользовательского каталога).

0 голосов
/ 14 октября 2008

думаю ошибка

Свойство settings 'ключ' не найден.

происходит из-за того, что значение 'key' не существует в вашем файле настроек (довольно очевидно).

Насколько я знаю, вы не можете добавлять значения параметров программно, вам, возможно, придется изучить возможность добавления всех необходимых параметров в файл в конце концов, хотя, как только они появятся, я думаю, вы сможете использовать код, который вы дали для сохранения изменений.

Чтобы сохранить изменения, вам нужно убедиться, что это настройки пользователя, а не приложения.

Файл настроек представляет собой довольно простой XML-файл, поэтому вы можете решить проблему, записав XML-файл непосредственно в файл, но я никогда этого не делал, поэтому не уверен, что он будет работать, или обязательно порекомендую этот подход.

http://msdn.microsoft.com/en-us/library/cftf714c.aspx - ссылка на MSDN, с которой нужно начинать.

...