C#关于如何获取动态创建button控件中指定button的值

a5632422 2011-04-21 02:06:50
这是我动态创建的button:
for (int i = 1; i <= dt.Rows.Count; ++i)
{
Button btn = new Button();
btn.Name = "button" + i;
btn.Text = dt.Rows[i-1][1].ToString();
btn.Location = new Point(i * 100, 8);
this.panel1.Controls.Add(btn);
btn.Click += new System.EventHandler(btn_Click);
}
在btn_Click事件中我需要获取btn.Text值来执行不同的功能:
private void btn_Click(object sender, EventArgs e)
{
switch(btn.Text)//可是这里的值获取不到
{
case "单选题":
...
case "多选题":
...
}
}
跪求高手帮忙
...全文
841 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
a5632422 2011-04-22
  • 打赏
  • 举报
回复
我的问题解决了,原因是我把给控件绑定事件的代码写错位置了,按我的逻辑不该写到Load里,以上各位的代码都没有问题,还是得感谢各位的提示
a5632422 2011-04-22
  • 打赏
  • 举报
回复
我大概知道什么原因了,我试着做了像15楼那样的例子也没有问题,原因就在于如果给button手动绑定text值的话它可以获取到,但是像我那样动态绑定text值的话它就获取不到了,这个问题该如何解决
跪求真相~~~~
Hamber_Bao 2011-04-22
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 a5632422 的回复:]
我的问题解决了,原因是我把给控件绑定事件的代码写错位置了,按我的逻辑不该写到Load里,以上各位的代码都没有问题,还是得感谢各位的提示
[/Quote]

那你就结贴呗。
a5632422 2011-04-21
  • 打赏
  • 举报
回复
跪求真相~~~~~~~~
Hamber_Bao 2011-04-21
  • 打赏
  • 举报
回复

private void btn_Click(Object sender,EventArgs e)
{
//转换类型
Button btn = sender as Button;
switch(btn.Text)
{
//可执行代码
}
}
#blackheart 2011-04-21
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 a5632422 的回复:]

引用 13 楼 nianhui 的回复:
从你的代码看事件是添加上去了,还有你提问中都说取不到值了,说明开始还是可以执行事件的吧,不然你怎么会知道取不到值?for循环是在哪执行的?其他地方有没有改动?

不,开始不知道不能执行事件,只是在编码的时候获取不到btn.Text所以就提问了,但是后来才发现不能执行事件,for循环是在窗体加载的时候执行的,这是源码:
private void F……
[/Quote]
我也很奇怪,我做了个像15楼那样的例子也可以执行,为啥LZ不行了涅
xiaoyuzi 2011-04-21
  • 打赏
  • 举报
回复
做了个简单例子,一点问题都没有
for (int i = 0; i < 2; i++)
{
Button btn = new Button();
btn.Width = 80;
btn.Name = "button" + i.ToString();
btn.Text = "hello " + i.ToString();
btn.Location = new Point(i*100, 0);
this.panel1.Controls.Add(btn);
btn.Click += new EventHandler(btn_Click);
}


void btn_Click(object sender, EventArgs e)
{
Button btn = sender as Button;
MessageBox.Show(btn.Text);
}
a5632422 2011-04-21
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 nianhui 的回复:]
从你的代码看事件是添加上去了,还有你提问中都说取不到值了,说明开始还是可以执行事件的吧,不然你怎么会知道取不到值?for循环是在哪执行的?其他地方有没有改动?
[/Quote]
不,开始不知道不能执行事件,只是在编码的时候获取不到btn.Text所以就提问了,但是后来才发现不能执行事件,for循环是在窗体加载的时候执行的,这是源码:
private void Form2_Load(object sender, EventArgs e)
{
CourseComboBox.DisplayMember = "CourseName";
CourseComboBox.ValueMember = "CourseID";
CourseComboBox.DataSource = Cul.SelectCourses(4);
System.Data.DataRowView dv = (System.Data.DataRowView)CourseComboBox.SelectedItem;
DataTable dt = Cul.GetCourseInscrip(Convert.ToInt32(dv["CourseID"]));
for (int i = 1; i <= dt.Rows.Count; ++i)
{
Button btn = new Button();
btn.Name = "button" + i;
btn.Text = dt.Rows[i-1][1].ToString();
btn.Location = new Point(i * 100, 8);
this.panel1.Controls.Add(btn);
btn.Click += new EventHandler(btn_Click);
}
}

private void btn_Click(object sender, EventArgs e)
{
FaccExam fe = new FaccExam();//实例化窗体
Button btn = sender as Button;
switch (btn.Text)
{
case "单选题":
fe.Show();//显示该窗体
break;
}

}
有问题么?
#blackheart 2011-04-21
  • 打赏
  • 举报
回复
从你的代码看事件是添加上去了,还有你提问中都说取不到值了,说明开始还是可以执行事件的吧,不然你怎么会知道取不到值?for循环是在哪执行的?其他地方有没有改动?
a5632422 2011-04-21
  • 打赏
  • 举报
回复
加了MessageBox.Show(btn.Text);也不管用,问题是程序都没有执行这个事件,但是把光标放到添加的事件名称上按F12可以跳过去,可以确定的是,这个Click事件根本没有添加上,可能是由于for循环的原因,但是不用for循环的话我没办法给每一个动态生成的button都添加这个事件
愁~~~
who 帮绑 me~~
#blackheart 2011-04-21
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 a5632422 的回复:]

没有人知道哪里有错误么,是不是在for循环中不能给动态创建的button添加事件,那到底该如何添加
求助,求助
[/Quote]
你在 private void btn_Click(object sender, EventArgs e)里面搞点输出试试
我姓区不姓区 2011-04-21
  • 打赏
  • 举报
回复
就你贴出来的代码而言应该是没问题的,你看看是不是你其它代码造成的
a5632422 2011-04-21
  • 打赏
  • 举报
回复
没有人知道哪里有错误么,是不是在for循环中不能给动态创建的button添加事件,那到底该如何添加
求助,求助
a5632422 2011-04-21
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 fengyarongaa 的回复:]
btn.Click += new System.EventHandler(btn_Click);这句代码有错么
——————————
这句话在这里 不成立吧
[/Quote]
为什么不成立,那应该放在哪里,我在百度查的都是这样写的啊
ycproc 2011-04-21
  • 打赏
  • 举报
回复
btn.Click += new System.EventHandler(btn_Click);这句代码有错么
——————————
这句话在这里 不成立吧
li358871791 2011-04-21
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 nianhui 的回复:]
private void btn_Click(object sender, EventArgs e)
{
Button btn = sender as Button; switch(btn.Text)//可是这里的值获取不到
{
case "单选题":
...
case "多选题":
...
}
}
[/Quote]
+1
a5632422 2011-04-21
  • 打赏
  • 举报
回复
恩,加了断点,但是没有跳进去
我姓区不姓区 2011-04-21
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 a5632422 的回复:]

为什么当我点击button的时候程序不执行btn_Click事件?
btn.Click += new System.EventHandler(btn_Click);这句代码有错么
[/Quote]
断点没进去?
a5632422 2011-04-21
  • 打赏
  • 举报
回复
为什么当我点击button的时候程序不执行btn_Click事件?
btn.Click += new System.EventHandler(btn_Click);这句代码有错么
我姓区不姓区 2011-04-21
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 nianhui 的回复:]
private void btn_Click(object sender, EventArgs e)
{
Button btn = sender as Button;
switch(btn.Text)//可是这里的值获取不到
{
case "单选题":
...
case "多选题":
...
}
}
[/Quote]
加载更多回复(1)

110,536

社区成员

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

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

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