C# 这可以通过 While 循环和 ComboBox 值实现吗?

C# Is this possible via While loop and ComboBox Values?

我有 43 个 Combox 值,我正在尝试循环并写入 XML。下面是我看不到的部分代码。

                        int i = 1;
                        while (i < 44)
                        {
                            string Test = Controls["Track_" + i].Text;
                            w.WriteElementString("Track_Name", Test);
                            i++;

我希望输入的是下面组合框中的文本,一直到 Test_43.Text。我不确定我做错了什么,或者我想做的事情是否可行?

w.WriteElementString("Track_Name", Test_1.Text);
w.WriteElementString("Track_Name", Test_2.Text);
w.WriteElementString("Track_Name", Test_3.Text);
w.WriteElementString("Track_Name", Test_4.Text);

是的,据我所知,几乎与您所写的一模一样。您正在使用 ["Track_" + i],而我认为您希望根据您发布的最后一点 ["Test_" + i]。

我将这段代码放在测试表单的按钮中(.NET 6.0,以防万一),它在两个文本行上显示“Hello”和“World”。我的 comboBox1.Text == "Hello" 和 comboBox2.Text == "World"

string myString = "";
for(int x = 1; x < 3; x++)
{
    myString += Controls["comboBox" + x].Text + "\n";
}
MessageBox.Show(myString);

你也可以这样做更简单一些:

int i = 1;
while (i < 44)
{
    w.WriteElementString("Track_Name", Controls["Test_" + i].Text);
    i++;
}

如果您使用 Controls[] 语法,则控件必须直接包含在表单中。如果它们在不同的容器中,例如 Panel,将找不到它们。

更简单的方法是使用 Controls.Find() 和“递归”选项,无论嵌套有多深,它都会按名称搜索控件:

for(int i=1; i<=43; i++)
{
    ComboBox cb = this.Controls.Find("Test_" + i, true).FirstOrDefault() as ComboBox;
    if (cb != null)
    {
        w.WriteElementString("Track_Name", cb.Text);
    }
}