这是我动态创建的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 "多选题":
                   ... 
             }
        }
跪求高手帮忙

解决方案 »

  1.   


      private void btn_Click(object sender, EventArgs e)
      {
       Button btn = sender as Button;
      switch(btn.Text)//可是这里的值获取不到
      {
      case "单选题":
      ...
      case "多选题":
      ... 
      }
      }
      

  2.   

    为什么当我点击button的时候程序不执行btn_Click事件?
    btn.Click += new System.EventHandler(btn_Click);这句代码有错么
      

  3.   

    btn.Click += new System.EventHandler(btn_Click);这句代码有错么
    ——————————
    这句话在这里 不成立吧
      

  4.   

    没有人知道哪里有错误么,是不是在for循环中不能给动态创建的button添加事件,那到底该如何添加
    求助,求助
      

  5.   

    你在  private void btn_Click(object sender, EventArgs e)里面搞点输出试试
      

  6.   

    加了MessageBox.Show(btn.Text);也不管用,问题是程序都没有执行这个事件,但是把光标放到添加的事件名称上按F12可以跳过去,可以确定的是,这个Click事件根本没有添加上,可能是由于for循环的原因,但是不用for循环的话我没办法给每一个动态生成的button都添加这个事件
    愁~~~
    who 帮绑 me~~
      

  7.   

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

  8.   

    不,开始不知道不能执行事件,只是在编码的时候获取不到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;
                }        }
    有问题么?
      

  9.   

    做了个简单例子,一点问题都没有
    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);
            }
      

  10.   


    private void btn_Click(Object sender,EventArgs e)
    {
       //转换类型
       Button btn = sender as Button;
       switch(btn.Text)
      {
       //可执行代码
      }
    }
      

  11.   

    我大概知道什么原因了,我试着做了像15楼那样的例子也没有问题,原因就在于如果给button手动绑定text值的话它可以获取到,但是像我那样动态绑定text值的话它就获取不到了,这个问题该如何解决
    跪求真相~~~~
      

  12.   

    我的问题解决了,原因是我把给控件绑定事件的代码写错位置了,按我的逻辑不该写到Load里,以上各位的代码都没有问题,还是得感谢各位的提示