2011-08-09 11 views
8

私はwinformsプロジェクトのアプリケーション設定にカスタムクラスのカスタムコレクションを追加しようとしています。私は6つの異なる方法で試してみたようです、this waythis waythis way、およびthis wayしかし、何も動いていないようにみえ...カスタムクラスのコレクションをSettings.Settingsに追加する

を含む現在のコードは準拠しており、正常に動作しない - 何の例外をどこでも。彼のSave関数をコード化しますが、設定xmlファイルには何も入力されません(私はいくつかの設定がありますが、これはすべてFYIですが、FYIの1つです)。それがロードされると、Properties.Settings.Default.LastSearchesは常にnull ...任意の考えですか?

HERESに私の現在のコード:

クラス:セッティングへの書き込み

[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); 
    } 
} 

:setttings

から

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++; } } 
+0

私はなぜこれをユーザー設定に保存しようとしているのですか?なぜあなたのクラスをディスクにシリアル化しないのですか? – Jethro

+0

@Jethroこれは、組み込みのユーザー設定が実際に行うことです。私はすでにそこにすべての私の他の設定を持っており、それをすべて一緒に保つように試みるのが理にかなっていました。 – Hershizer33

+0

カスタムクラスを永続化する方法については、この記事を読んだことがありますか? http://www.codeproject.com/KB/cs/WinAppUserSettings.aspx – Jethro

答えて

7

コメント内のコメントlink codeproject.comには、カスタムユーザー設定を作成する方法についての簡単なチュートリアルがあります。

うれしい私は助けることができました。

関連する問題