私はwinformsプロジェクトのアプリケーション設定にカスタムクラスのカスタムコレクションを追加しようとしています。私は6つの異なる方法で試してみたようです、this way、this way、this 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++; } }
私はなぜこれをユーザー設定に保存しようとしているのですか?なぜあなたのクラスをディスクにシリアル化しないのですか? – Jethro
@Jethroこれは、組み込みのユーザー設定が実際に行うことです。私はすでにそこにすべての私の他の設定を持っており、それをすべて一緒に保つように試みるのが理にかなっていました。 – Hershizer33
カスタムクラスを永続化する方法については、この記事を読んだことがありますか? http://www.codeproject.com/KB/cs/WinAppUserSettings.aspx – Jethro