Winforms — настройки динамической загрузки/сохранения

StackOverflow https://stackoverflow.com/questions/201233

  •  03-07-2019
  •  | 
  •  

Вопрос

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

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

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

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» не найдено». Есть ли что-то, что мне не хватает?

Это было полезно?

Решение

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

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

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

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

Другие советы

Я думаю, ошибка

Свойство «Настройки» не было найдено.

происходит потому, что значение «ключ» не существует в вашем файле настроек (достаточно очевидно).

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

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

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

http://msdn.microsoft.com/en-us/library/cftf714c.aspx это ссылка MSDN для начала.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top