[求助]动态生成控件控制另一个动态生成控件

babylon8979 2011-05-04 02:40:39
我动态生成了一个button和一个textbox控件,我想给button添加事件,让它可以控制textbox的text。
现在的情况是,我获取到了textbox的id,存入全局变量中。但是在事件里根据这个全局变量中的字符串,控制不了textbox这个控件。
(TextBox)this.Controls[id],这句话好像只能得到已有的textbox的id,但是得不到动态生成的textbox的id。应该怎么解决这个问题?
代码如下:
public string[] tbxname = new String[1000];
public int number=0;
...
private void b_c(object sender, EventArgs e)
{
Button b = ((Button)sender);
string txt = b.Text;
b.Name = "a";
b.Text = "b";

string id = tbxname[number];
if (this.Controls.ContainsKey(id))
{
TextBox tb = (TextBox)this.Controls[id];
tb.Text = "hello";
}
}


private void button5_Click(object sender, EventArgs e)
{
number++;
string x = "tx" + number.ToString();

TextBox tem = new TextBox();
tem.Location = new Point(number * 50 + 50, 50);
tem.Name = x;
tem.Visible = true;
tem.Text = "yes";

Button btem = new Button();
btem.Location = new Point(number * 50 + 50, 80);
btem.Name = "btn" + x;
btem.Click += new EventHandler(b_c);


panel2.Controls.Add(btem);
panel2.Controls.Add(tem);


string tn = x;
tbxname[number]=tn;
}
...全文
68 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
babylon8979 2011-05-04
  • 打赏
  • 举报
回复
2楼的程序可以,谢谢,非常感谢。
3楼的程序我试了下,会出错,说在执行tb.Text = "hello";的时候“未将对象引用设置到对象的实例。”可能是我程序的问题,我再调试一下。。。
matrixcl 2011-05-04
  • 打赏
  • 举报
回复
this.Controls改成panel2.Controls


private void b_c(object sender, EventArgs e)
{
Button b = ((Button)sender);
string txt = b.Text;
b.Name = "a";
b.Text = "b";

string id = tbxname[number];
//if (this.Controls.ContainsKey(id))
//{
// TextBox tb = (TextBox)this.Controls[id];
// tb.Text = "hello";
//}

if (panel2.Controls.ContainsKey(id))
{
TextBox tb = (TextBox)panel2.Controls[id];
tb.Text = "hello";
}
}
include_me 2011-05-04
  • 打赏
  • 举报
回复

private void button5_Click(object sender, EventArgs e)
{
number++;
string x = "tx" + number.ToString();

TextBox tem = new TextBox();
tem.Location = new Point(number * 50 + 50, 50);
tem.Name = x;
tem.Visible = true;
tem.Text = "yes";

Button btem = new Button();
btem.Location = new Point(number * 50 + 50, 80);
btem.Name = "btn" + x;
btem.Click += delegate{
tem.Text = "hello";
};


panel2.Controls.Add(btem);
panel2.Controls.Add(tem);


}
宝_爸 2011-05-04
  • 打赏
  • 举报
回复
动态控件每次post back的时候都要重新创建。

重新创建的时候使用同样的id.

110,545

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧