我有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);
如果使用Controls[]
语法,则控件必须直接包含在Form中。如果它们位于不同的容器中(例如Panel(,则找不到它们。
一种更简单的方法是使用CCD_;递归";无论嵌套有多深,都将按名称搜索控件的选项:
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);
}
}
是的,据我所知,它几乎与您所写的完全一样。你使用的是[quot;Track_"+i],而我认为你想要的是基于你发布的最后一位的[quot。
我把这段代码放在测试表单上的一个按钮里(.NET 6.0,如果它很重要的话(;你好"以及";世界;在两行文字上。我的组合框1.Text==";你好"以及组合框2;世界;
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++;
}