在C#win表单中加载XML文件
在我的程序中,用户可以通过按钮保存设置。这家商店很好用。加载设置并不完全正确。加载规则时出现问题。我列出了几条规则。我不知道如何指定索引。有人能帮我吗 保存/加载设置的方法:在C#win表单中加载XML文件,c#,xml,winforms,C#,Xml,Winforms,在我的程序中,用户可以通过按钮保存设置。这家商店很好用。加载设置并不完全正确。加载规则时出现问题。我列出了几条规则。我不知道如何指定索引。有人能帮我吗 保存/加载设置的方法: private void SaveUserConfigButton_Click(object sender, EventArgs e) { var userConfig = new UserConfig(); userConfig.RandomPopulation = (int)_
private void SaveUserConfigButton_Click(object sender, EventArgs e)
{
var userConfig = new UserConfig();
userConfig.RandomPopulation = (int)_probability;
userConfig.Rule = _gameOfLife.NextGenerationRule.RuleName;
userConfig.Speed = _timer.Interval;
userConfig.UseBoundary = _gameOfLife.UseBoundary;
SaveUserConfig(userConfig);
}
private void MainForm_Load(object sender, EventArgs e)
{
var userConfig = LoadUserConfig(_path);
InputRandomPopulationNumbericUpDown.Value = userConfig.RandomPopulation;
SelectRulesComboBox.SelectedItem = _rules[5]; // <-- here is the problem
SpeedTrackBar.Value = userConfig.Speed;
BoundaryCheckBox.Checked = userConfig.UseBoundary;
}
private void SaveUserConfigButton\u单击(对象发送方,事件参数e)
{
var userConfig=new userConfig();
userConfig.RandomPopulation=(int)\u概率;
userConfig.Rule=\u gameOfLife.NextGenerationRule.RuleName;
userConfig.Speed=\u timer.Interval;
userConfig.usebundary=\u gameOfLife.usebundary;
SaveUserConfig(userConfig);
}
私有void主窗体加载(对象发送方、事件参数e)
{
var userConfig=LoadUserConfig(_路径);
InputRandomPopulationNumbericUpDown.Value=userConfig.RandomPopulation;
SelectRulesComboBox.SelectedItem=_rules[5];//为什么不使用datatable&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;
}
}
}
void readSettings()
{
DataTable dt=新的DataTable();
dt.ReadXml(@“文件名”在这里);
对于(int i=0;i
编辑:这不是最佳方式,但它可以让您开始。始终尝试/捕获从xml验证数据的每个块-千万不要相信用户输入,Nuff说。为什么不使用datatable&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;
}
}
}
void readSettings()
{
DataTable dt=新的DataTable();
dt.ReadXml(@“文件名”在这里);
对于(int i=0;i
编辑:这不是最佳方式,但它可以让您开始。始终尝试/捕获从xml验证数据的每个块-千万不要相信用户输入,Nuff说。假设userConfig.Rule
是您希望在SelectRulesComboBox
中选择的规则的名称,并且规则的每个实例都有一个名为的属性ode>Name
您需要做的是在\u rules
集合中查找userConfig.Rule
的索引
如果\u规则
是列表
,则可以使用以下方法:
否则,您可以将每个规则投影到\u 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
的规则,则上面的代码将引发异常,假设userConfig.rule
是要在SelectRulesComboBox
中选择的规则的名称,并且规则的每个实例都有一个名为Name
的属性,则需要执行以下操作:nd\u rules
集合中userConfig.Rule
的索引
如果\u规则
是列表
,则可以使用以下方法:
否则,您可以将每个规则投影到\u 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
的规则,则上述代码将引发异常。请向我们展示您的SaveUserConfig和LoadUserConfig方法,以及您的使用规则[5]加载组合框。所选项目而不是UserConfig中的属性,因此这可能也是问题所在?什么是\u rules
?您说这是问题的那一行是您第一次提到它。您确定您的意思不是SelectRules组合框。SelectedIndex
而不是SelectedItem
?\u rules是一个来自i的列表一个什么类型的对象的列表?你能告诉我们你的SaveUserConfig和LoadUserConfig方法吗?除了你的使用规则[5]加载组合框。所选项目而不是UserConfig中的属性,因此这可能也是问题所在?什么是\u rules
?您说这是问题的那一行是您第一次提到它。您确定您的意思不是SelectRules组合框。SelectedIndex
而不是SelectedItem
?\u rules是一个来自i的列表接口。什么类型的对象的列表?