2011-08-24 97 views
2

说我有10个文本框,我想将相同的文本放入其中。我不想写textBoxNum. Text = "hello!"十倍,所以我可能会写这样的事:通过for循环迭代文本框

for(int i=1; i<=10; i++) 
{ 
    textBox + i. Text = "hello!"; 
} 

很显然,这是行不通的。

这怎么能用for循环完成?

+0

你应该命名你的文本框。 – SLaks

回答

6

您或者需要将所有文本框加载到列表或数组结构中,并且这将允许您遍历它。

TextBox[] boxes = { tb1, tb2, tb3, ... }; 

否则,你可以检查你的表格/容器为TextBox类型的项目Controls财产。如果控件可以嵌套在更深的容器中,则可能需要递归地探索它们(在这一点上,我会认真考虑一种数组方法,除非你有一些可怕的文本框加载)。但作为一个出发点,你可能有

foreach (var tb in this.Controls.OfType<TextBox>()) 
{ 
    tb.Text = "whatever"; 
} 
3

你应该把你的文本框到一个数组:

TextBox[] boxes; 

public MyForm() { 
    InitializeComponent(); 
    boxes = { someTextBox, otherTextBox, ... }; 
} 
1

像这样:

foreach (Control c in this.Controls) 
{ 
    if (c is TextBox) 
    { 
     ((TextBox)c).Text = "Hello"; 
    } 
} 

假设你要设置包含在控制\窗体上的所有文本框的文本,但也可以是针对更具体的场景进行了修改

0

您也可以编辑控件只匹配你想要的东西。这是一个例子。

foreach(Control ctrl in Controls) 
    { 
    if (ctrl.Name.StartsWith("TextBoxToEdit")) 
    { 
     ctrl.Text = "Hello!"; 
    } 
    } 

而且,没有必要投控制到文本框的控制已经拥有Text属性。

+0

它可能有'Text'属性,但是你仍然想验证'if(ctrl是TextBox){}'。任何可以具有以“TextBoxToEdit”开头的名称。 –