我动态生成了100个textbox,然后,将数组中的100个字符分别放到每个textbox中,如何赋值到里面呢?生成动态textbox的代码如下:
void textbox()
{
int d = 1;
for (int i = 0; i < 10; i++)//生成的列数
{
for (int j = 0; j < 10; j++)//生成的每行的个数
{
TextBox TextBox1 = new TextBox();
TextBox1.Text = "";
TextBox1.Size = new Size(50, 50);
TextBox1.Margin = new System.Windows.Forms.Padding(0);
TextBox1.Location = new Point(30 + TextBox1.Width * j, 190 + i * 50);
//TextBox1.Name = "TextBox" + i.ToString() + j.ToString();
d += 1;
TextBox1.Name = "TextBox" + d;
this.Controls.Add(TextBox1);
}
}
int c = 1;
for (int a = 0; a < 10; a++)//生成的列数
{
for (int b = 0; b < 10; b++)//生成的每行的个数
{
Label lable1 = new Label();
lable1.Text = "";
lable1.Size = new Size(50, 50);
lable1.Margin = new System.Windows.Forms.Padding(0);
lable1.Location = new Point(45 + lable1.Width * b, 170 + a * 50);
lable1.Name = "Lable" + lable1.Text;
lable1.Text = c.ToString();
c += 1;//等同于c=c+1;
this.Controls.Add(lable1);
}
}
}
赋值的数组代码如下:
private void ReceiveEdit_TextChanged(object sender, EventArgs e)
{
char[] temp = ReceiveEdit.Text.ToCharArray();
Control.ControlCollection cc = this.Controls;
//Form1.ControlCollection cc = this.Controls;
foreach (Control con in cc)
{
if (con is TextBox)
{
for (int w = 1; w <= temp.Length; w++)
{
????????= temp[w].ToString();
}
}
// else { MessageBox.Show("没有找到文本框!"); }
}
生成的时候直接赋值不就行了,干嘛要另搞一个循环专门来弄
自己定义一个数组或者集合来引用哪些控件。
你在for循环中创建个临时对象,然后(离开方法时)丢掉对象自身的引用,又来说要找到控件,这样绕自己干什么呢?
你在设计整个 UI 的背后的结构时,就没有对对象集合有一个基本的建模。
答案来说,不过你知道 con is TextBox,却不知道con as TextBox?
好比如说一个人说自己养了100和孩子,结果他谁都不认识、每一个孩子都标题党地接触一下就忘记了,然后又来问别人“我怎么知道每一个人叫什么名字?”这就奇怪了。他自己为什么不动脑子(或者拿一个本本)记住每一个孩子叫什么名字呢?
TextBox1.Name = "TextBox" + d;
this.Controls.Add(TextBox1);
那么
(this.Controls["TextBox" + d] as TextBox).Text = xxx
TextBox TextBox1 = new TextBox();
TextBox1.Text = "";
你在这里干嘛不赋值
你应该定义一个数组或者集合,例如 List<TextBox>、List<Label>、List<MyControlXX>,而不是纠结什么“遍历”。
在 UI 背后对应的是你的设计内容,你应该从顶层对需要管理的对象集合建模,而不是纠结于从底层去查找什么东西。
然后C#好像有一个 FindContralById[""]的方法的。我依稀记得我以前用过。你给每个TEXTBOX放个ID就可以找到这个控件了。
foreach (Control con in cc)
{
if (con is TextBox)
{
for (int w = 1; w <= temp.Length; w++)
{
????????= temp[w].ToString();
}
}
// else { MessageBox.Show("没有找到文本框!"); }
}
你这里的代码意思是temp是一个数组,保存着这100个textbox的值对吧?
如果是这样,那方法就很多:
1、把这100个textbox保存起来,比如新建一个List对象,在this.controls.add的地方也加到这个list对象中去,这样在temp循环小蜜蜂论坛发帖机里就可以根据序号找对应的textbox
2、把序号保存在textbox的某个值里,比如textbox1.Tag对象,这个是object类型的,可以保存数字,也可以保存对象。
if (con is TextBox)
{
TextBox txt = con as TextBox;
int index = txt.Tag as int;
txt.Text = temp[index].ToString().
}
((TextBox)this.Controls[string.format("textBox{0}",d)]).Text = "xxx";
这么玩就可以。通过控件名字找
菜鸟终于成功了,感谢大家的帮助,最终的句子是这样的,测试了好多句子总是提示不能给实例赋值。
//con.Controls[w+18].Text =temp[w].ToString();
//(con as TextBox).Text= temp[w].ToString();
//string h = temp[w].ToString();
//(this.Controls["TextBox" + w] as TextBox).Text = temp[w].ToString();//成功了一次,后来不知道为什么不行了
//((TextBox)this.Controls[string.Format("TextBox{0}", w)]).Text = temp[w].ToString();
//((TextBox)this.Controls["TextBox" + w.ToString()]).Text = temp[w].ToString();
List<TextBox> list = this.Controls.OfType<TextBox>().ToList();
list[w+2].Text= temp[w].ToString();