如何给这些textbox中赋值
我动态⽣成了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对象,在ls.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();
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论