在我的程序中,用户可以使用按钮保存设置。这家商店有效。加载设置不正常。我在加载规则时遇到问题。我有几个规则列表。我不知道如何指定索引。请有人帮帮我吗?
保存/加载设置的方法:
row1$V5
我的英语不太好,我希望这是可以理解的。
答案 0 :(得分:2)
假设userConfig.Rule
是您要在SelectRulesComboBox
中选择的规则的名称,并且规则的每个实例都有一个名为Name
的属性,您需要查找的索引是userConfig.Rule
集合中的_rules
。
如果_rules
是List<T>
,那么您可以使用FindIndex方法:
SelectedRulesCombobox.SelectedIndex = _rules.FindIndex(r => r.Name == userConfig.Rule);
否则,您可以在_rules
集合中将每个规则与其索引一起投影,并获得第一个具有Name == userConfig.Rule
的规则:
SelectedRulesCombobox.SelectedIndex = _rules.Select((rule, index) => new
{
Rule = rule,
Index = index
})
.First(x => x.Rule.Name == userConfig.Rule)
.Index;
请注意,如果找不到Name == userConfig.Rule
的规则,上面的代码会抛出异常。
答案 1 :(得分:0)
为什么不使用数据表&amp; WriteXml和ReadXml?
void writeResults()
{
DataTable dt = new DataTable();
dt.Columns.Add("configID");
dt.Columns.Add("configValue");
//Other code you want to add
//Then add row for each setting
Datarow r = dt.NewRow();
r["configID"]= "Speed"; //e.g. Speed
r["configValue"]=_timer.Interval.ToString();
dt.Rows.Add(r);
// snip
//then save datatable to file
dt.TableName="UserConfigs";
dt.WriteXml(@"filename_goes_here");
}
从文件中读取设置更加容易:
void readSettings()
{
DataTable dt = new DataTable();
dt.ReadXml(@"filename_goes_here");
for(int i = 0; i < dt.Rows.Count; i++)
{
switch(dt.Rows[i][0])
{
case "Speed":
try
{
_timer.Interval=Int32.Parse(dr.Rows[i][1]);
}
catch
{
// we've got a problem !
}
break;
default:break;
}
}
}
编辑:这不是最佳方式,但可以帮助您入门。 Nuff说,总是尝试/捕获你从xml验证数据的每个块 - 永远不要相信用户输入。