由于之前只用过C#弄过asp.net,现在要做一个程序,所以有点不熟悉。
Controls下没有找到FindControl这个方法,不知道为什么。
其实我想实现的是,我有textbox1,textbox2,textbox3,textbox4一系列的控件,
想用一个for,将其付值,例如textboxi这样,不知道怎么实现,又找不到FindControl。。
Controls下没有找到FindControl这个方法,不知道为什么。
其实我想实现的是,我有textbox1,textbox2,textbox3,textbox4一系列的控件,
想用一个for,将其付值,例如textboxi这样,不知道怎么实现,又找不到FindControl。。
{
if (ctr.Name == "textbox1")
ctr.Text = "Find you";
}
递归查找。
int i = 1;
foreach (Control c in this.panel1.Controls)
{
if (c is TextBox && c.Name == "TextBox" + i.ToString() && i < 5)
{
TextBox tb = (TextBox)c;
tb.Text = i.ToString();//设置Text值
i++;
}
}
---
就这样用
用了这个方法,只有textbox1,有效,其它的都起不了作用。。
for (a=1; a <= 5; a++)
{
TextBox tb_name =new TextBox();
tb_name =(TextBox)this.Controls["tb_name1"];
name[a] = tb_name.Text;
}
我这样,编译时没问题,就执行时指着
name[a] = tb_name.Text;
出错:
未将对象引用设置到对象的实例。
{
if (ctr.Name == "textbox1")
ctr.Text = "Find you";
}
TextBox tb_name =new TextBox(); 这一句是多余的"出错" 可能是你的控件名不是 tb_name1
int a=1;
foreach (Control c in this.panel1.Controls)
{
if (c.Name == "tb_name"+a.ToString())
{
TextBox tb_name = (TextBox)this.panel1.Controls["tb_name"+a.ToString()];
name[a] = tb_name.Text;
a++;
}
}为什么只有name[1]能成功付值?谢谢了。
输入控件名没有错的,tb_name1~tb_name5
{
if (c.Name == ("tb_name"+a.ToString()))
{
name[a] = c.Text;
a++;
}
}
{
if (c.Name == "tb_name"+a.ToString())
{
TextBox tb_name = (TextBox)this.panel1.Controls["tb_name"+a.ToString()];
name[a] = tb_name.Text;
a++;
}
} a++这里会出现问题,楼主的意思是按照a=1,2,3,4,5,的顺序将控件取出,但是你的foreach循环只循环1次,你只能找到a=1的时候。因为this.panel1.Controls中的控件集合并不是按照你的那个名字的顺序存放的,如果你调试一下你就会发现时间上那几个textbox在集合中的顺序正好是反着的。也就是你foreach时先会遇到Name为tb_name5的TextBox,但此时你的a还是1,所以不符合,继续foreach后面的数据然后是tb_name4....直到遇到tb_name1,才会进入if语句块,此时也就是楼主说的第一次有效的地方,然后是a++,再剩下的foreach中找名字是tb_name2的控件,可是再也找不到了,因为已经错过了。
如果楼主还是想采取遍历的方法,应该是先将this.panel1.Controls集合按照每个控件的名字排序,才可以用楼主的方法。否则应保证循环5次,代码如下:for (a = 1; a <= 5; a++)
{
foreach (Control c in this.panel1.Controls)
{
if (c.Name == ("tb_name" + a.ToString()))
{
TextBox tb_name = (TextBox)this.panel1.Controls[("tb_name" + a.ToString())];
name[a-1] = tb_name.Text;
}
}
}
不过采用名字直接获取可以调高效率,和减少代码,程序代码: string namecol = "tb_name";
for (int i = 1; i <= 5; i++)
{
name[i - 1] = ((TextBox)this.panel1.Controls[namecol + i.ToString()]).Text;
}
不过建议楼主在CS端做表单还是选择DataGridView,或者ListView控件,如果数据量大了,大量的TextBox会使对话框的展示和重画非常慢。
string ctrlName = string.Empty;
for (int i = 0; i < this.Page.Controls; i++)
{
ctrlName = "textbox" + i.ToString(); //控件名称
TextBox txtBox = FindTextBoxControl(ctrlName); //查找
txtBox.Text = ctrlName; //赋值
} /// <summary>
/// 查找TextBox控件
/// </summary>
/// <param name="ctrlName">控件名称</param>
/// <returns></returns>
private TextBox FindTextBoxControl(string ctrlName)
{
foreach (Control ctrl in this.Page.Controls)
{
TextBox tb = ctrl as TextBox;
if(null==tb)
{
continue;
}
if (tb.Name == ctrlName)
{
return tb;
}
}
}