我自己想通过类来手写生成许多个控件,而不是用手从左边的工具箱拖过来,for (int i = 1; i <= 10; i++)
            {
                Button btnRpt = new Button();
                btnRpt.Location = new System.Drawing.Point(24, 36 + i*10);
                btnRpt.Name = "btnTest" + i;
                btnRpt.Size = new System.Drawing.Size(150, 23);
                btnRpt.TabIndex = 0;
                btnRpt.Text = "测试" + i;
                btnRpt.UseVisualStyleBackColor = true;
                btnRpt.Click += new System.EventHandler(btnTest1_Click);
                panel1.Controls.Add(btnRpt);
            }
但遇到一个问题:btnRpt.Click += new System.EventHandler(btnTest1_Click);这个事件如何实现循环生成呢?要不要另外写出对应的函数btnTest1_Click?

解决方案 »

  1.   

    不需要循环生成。可以指向同一个btnTest_Click在 btnTest_Click里面:
    if (sender.Name == "btnTest1") MessageBox.Show("you click button1");
    if (sender.Name == "btnTest2") MessageBox.Show("you click button2");
      

  2.   

    有一个就可以了。for (int i = 1; i <= 10; i++)
      {
      Button btnRpt = new Button();
      btnRpt.Location = new System.Drawing.Point(24, 36 + i*10);
      btnRpt.Name = "btnTest" + i;
      btnRpt.Size = new System.Drawing.Size(150, 23);
      btnRpt.TabIndex = 0;
      btnRpt.Text = "测试" + i;
      btnRpt.UseVisualStyleBackColor = true;
      btnRpt.CommandArgument = i.ToString();
      btnRpt.Click += new System.EventHandler(btnClick);
      panel1.Controls.Add(btnRpt);
      }这样在btnClick方法中就可以知道CommandArgument了
      

  3.   


    private void btnClick(Object source,EventArgs args)
    {
        String commandArgument = ((Button)source).CommandArgument;
    }
      

  4.   

    当然要了!没函数,编译都通不过!不过你可以只写一个方法,在方法中判断 触发者是哪个按钮,来分别处理就可以了
    Button btnRpt = sender as Button ;
    if(btnRpt ==null)return;
    if(btnRpt.Name == "btnTest1"){}
    else if(){}.......
      

  5.   

    只需要生成时候调用btnClick 就可以了 这样每次生成自动调用btnClick
      

  6.   

    吓到我了,我以为你自己写控件按钮事件.
    进来一看标题,原来是动态生成控件.btnRpt.Click += new System.EventHandler(btnTest1_Click);这个事件如何实现循环生成呢?
    不需要弄那么麻烦,在一个事件中根据控件ID来执行相应条件的动作.要不要另外写出对应的函数btnTest1_Click?
    要.否则会报错