-1

可能重复:
在 C# winforms 中按名称查找控件

我将尝试解释它.. 所以我有一个 for 循环,每次我想加载与循环整数相等的文本框编号。

这是我的代码:

for(int i=1 ; i<=indulok+1 ; i++)
{
    StreamWriter sw = new StreamWriter("futamok/"+comboBox1.Text + "/" + indulok + ".txt");
    sw.WriteLine(textBox1.Text);
    sw.Dispose();
}

现在我想将 textBox1.Text 替换为如下内容:

sw.WriteLine(textBox + i + .Text);

但这当然行不通。

4

3 回答 3

5

这是一种按名称查找控件的替代方法。

        for (int i = 1; i <= indulok + 1; i++)
        {
            if (this.Controls.ContainsKey("textBox" + i.ToString()))
            {
                TextBox txtBox = this.Controls["textBox" + i.ToString()] as TextBox;
                if (txtBox != null)
                {
                    string FileName = "C:\\" + i.ToString() + ".txt";
                    System.IO.File.WriteAllText(FileName, txtBox.Text);
                }
            }
        }

如果您的控件嵌套在其他控件(即 GroupBox)中,您可能需要使用 Find 函数

        for (int i = 1; i <= indulok + 1; i++)
        {
            Control[] controls = this.Controls.Find("textBox" + i.ToString(), true);
            if (controls.Length > 0)
            {
                TextBox txtBox = controls[0] as TextBox;
                if (txtBox != null)
                {
                    string FileName = "C:\\" + i.ToString() + ".txt";
                    System.IO.File.WriteAllText(FileName, txtBox.Text);
                }
            }
        }
于 2013-01-24T20:37:18.003 回答
3

您可以将文本框放入某种索引集合中。其中最简单的是一个数组

所以,假设你有一些像

textBox[] textBoxes

然后你可以打电话

sw.WriteLine(textBoxes[i].text);
于 2013-01-24T20:26:50.587 回答
0

我猜你正在运行某种 Windows 窗体项目?如果是,您可以循环 Controls-array 以查找所有文本框:

foreach (Control c in this.Controls)
{
    if (c.GetType() == textBox1.GetType())
        sw.WriteLine(c.Text);
}
于 2013-01-24T20:50:54.870 回答