【发布时间】:2015-08-07 13:58:24
【问题描述】:
我想将StringDictionary 保存到应用程序设置中,以便在应用程序启动时用保存的值填充我的列表框lbc_lastCustomersVisited。
这是我的应用程序设置(XML 格式):
<?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="Wibe_EFI.Properties" GeneratedClassName="Settings">
<Profiles />
<Settings>
<Setting Name="ApplicationSkinName" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
<Setting Name="LastTimeWibeDataObtained" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
<Setting Name="LastVisitedCustomer" Type="System.Collections.Specialized.StringDictionary" Scope="User">
<Value Profile="(Default)" />
</Setting>
</Settings>
在我的表单中,我得到了一个 StringDictionary 局部变量:
public partial class MainForm : XtraForm
{
private StringDictionary lastVisitedCustomers = new StringDictionary();
[...]
}
这是我如何填写我的 StringDictionary 局部变量:
private void btn_selectCustomer_Click(object sender, EventArgs e)
{
DataRowView selectedRow = GetCustomersGridSelectedRow();
lastVisitedCustomers.Add(GetCustomerID(selectedRow), String.Format("{0} - {1}", GetCustomerName(selectedRow), GetCustomerCity(selectedRow)));
}
(StringDictionary 填写成功)
在FormClosing,我保存我的设置:
private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
{
Settings.Default["ApplicationSkinName"] = UserLookAndFeel.Default.SkinName;
Settings.Default.LastVisitedCustomer = lastVisitedCustomers;
Settings.Default.Save();
}
设置ApplicationSkinName 已成功保存,但lastVisitedCustomer StringDictionary 未成功保存。
因为当我在应用程序启动时加载我的设置时,Settings.Default.LastVisitedCustomer 是null。
这是我如何加载关于应用程序皮肤的设置(它有效):
public MainForm()
{
InitializeComponent();
InitSkinGallery();
UserLookAndFeel.Default.SkinName = Settings.Default["ApplicationSkinName"].ToString();
}
但由于NullReferenceException,我无法在此处加载我的StringDictionnary。
所以我在这里加载它:
private void MainForm_Load(object sender, EventArgs e)
{
_mySqlCeEngine = new MySqlCeEngine(this);
ShowHomePanel();
LoadLastVisitedCustomers();
}
private void LoadLastVisitedCustomers()
{
if (Settings.Default.LastVisitedCustomer.Count > 0)
{
lastVisitedCustomers = Settings.Default.LastVisitedCustomer;
}
lbc_lastCustomersVisited.DataSource = new BindingSource(lastVisitedCustomers, null);
lbc_lastCustomersVisited.DisplayMember = "Value";
lbc_lastCustomersVisited.ValueMember = "Key";
}
但此时,Settings.Default.LastVisitedCustomer 为空,我不明白为什么。我尝试了一些方法,例如不使用局部变量并直接从 Settings.Default.LastVisitedCustomer 读取/写入,但我遇到了同样的问题。
谢谢,
地狱猫。
编辑:添加完整的Settings.settings 文件(XML 视图)
【问题讨论】:
-
您可以编辑您的帖子并包含整个 XML 文件吗?我认为您在
Settings中访问了错误的节点。 -
我编辑了我的帖子。谢谢!
-
尝试在 MainForm() 构造函数中使用
this.LastVisitedCustomers = (StringDictionary)Settings.Default["LastVisitedCustomer"]。 -
感谢您的帮助,但它仍然是一样的:它在启动时为空:(
标签: c# .net winforms settings.settings stringdictionary