Добавить коллекцию пользовательского класса в Settings.Settings - PullRequest
9 голосов
/ 09 августа 2011

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

В настоящее время код соответствует и работает нормально - исключений нет нигде. Кодируйте его функцию «Сохранить», но в XML-файле настроек не создаются записи (у меня есть несколько других настроек, и они работают для всех из них, кроме этого, к вашему сведению). Когда он загружается, Properties.Settings.Default.LastSearches всегда равен нулю ... Есть мысли?

Вот мой текущий код:

Классы:

[Serializable]
public class LastSearch : ISerializable
{
    public DateTime Date { get; set; }
    public string Hour { get; set; }
    public string Log { get; set; }
    public string Command { get; set; }
    public List<string> SelectedFilters { get; set; }
    public List<string> SearchTerms { get; set; }
    public List<string> HighlightedTerms { get; set; }
    public List<string> ExcludedTerms { get; set; }

    public LastSearch(DateTime date, string hour, string log, string command, List<string> selectedFilters,
        List<string> searchTerms, List<string> highlightedTerms, List<string> excludedTerms)
    {
        Date = date.ToUniversalTime();
        Hour = hour;
        Log = log;
        Command = command;
        SelectedFilters = selectedFilters;
        SearchTerms = searchTerms;
        HighlightedTerms = highlightedTerms;
        ExcludedTerms = excludedTerms;
    }

    protected LastSearch(SerializationInfo info, StreamingContext context)
    {
        Date = info.GetDateTime("Date");
        Hour = info.GetString("Hour");
        Log = info.GetString("Log");
        Command = info.GetString("Command");
        SelectedFilters = (List<string>)info.GetValue("SelectedFilters", typeof(List<string>));
        SearchTerms = (List<string>)info.GetValue("SearchTerms", typeof(List<string>));
        HighlightedTerms = (List<string>)info.GetValue("HighlightedTerms", typeof(List<string>));
        ExcludedTerms = (List<string>)info.GetValue("ExcludedTerms", typeof(List<string>));
    }
    [SecurityPermissionAttribute(SecurityAction.Demand, SerializationFormatter = true)]

    public void GetObjectData(SerializationInfo info, StreamingContext context)
    {
        info.AddValue("Date", Date);
        info.AddValue("Hour", Hour);
        info.AddValue("Log", Log);
        info.AddValue("Command", Command);
        info.AddValue("SelectedFilters", SelectedFilters);
        info.AddValue("SearchTerms", SearchTerms);
        info.AddValue("HighlightedTerms", HighlightedTerms);
        info.AddValue("ExcludedTerms", ExcludedTerms);
    }
}

[Serializable]
public class LastSearchCollection : ISerializable
{
    public List<LastSearch> Searches { get; set; }

    public LastSearchCollection()
    {
        Searches = new List<LastSearch>();
    }

    public LastSearchCollection(SerializationInfo info, StreamingContext ctxt)
    {
        Searches = (List<LastSearch>)info.GetValue("LastSearches", typeof(List<LastSearch>));
    }
    [SecurityPermissionAttribute(SecurityAction.Demand, SerializationFormatter = true)]

    public void GetObjectData(SerializationInfo info, StreamingContext context)
    {
        info.AddValue("Searches", Searches);
    }
}

Запись в настройки:

if (RecentQueriesToolStripMenuItem.DropDownItems.Count > 0)
{
    // Last Search Settings
    if (Properties.Settings.Default.LastSearches == null)
        Properties.Settings.Default.LastSearches = new LastSearchCollection();

    Properties.Settings.Default.LastSearches.Searches.Clear();
    foreach (LastSearchMenuItem item in RecentQueriesToolStripMenuItem.DropDownItems)
    {
        Properties.Settings.Default.LastSearches.Searches.Add(item.SearchData);
    }
}

// Save all settings
Properties.Settings.Default.Save();

Загрузка из поселений

// Last Searches
if (Properties.Settings.Default.LastSearches != null)
{
    int i = 0;
    foreach (LastSearch search in Properties.Settings.Default.LastSearches.Searches)
    {
        LastSearchMenuItem searchMenuItem = new LastSearchMenuItem(search);
        RecentQueriesToolStripMenuItem.DropDownItems.Add(searchMenuItem);
        RecentQueriesToolStripMenuItem.DropDownItems[i].Click += new EventHandler(RecentSearch_Click);
        i++;
    }
}

1 Ответ

8 голосов
/ 10 августа 2011

, как предлагается в комментариях, эта ссылка на codeproject.com содержит приятное простое руководство по созданию пользовательских настроек пользователя.

Рад, что смог помочь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...