Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C#win表单中加载XML文件_C#_Xml_Winforms - Fatal编程技术网

在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的列表接口。什么类型的对象的列表?