【问题标题】:C# Create Dynamic Buttons and onClick Dynamic EventHandlersC# 创建动态按钮和 onClick 动态事件处理程序
【发布时间】:2013-05-02 20:24:32
【问题描述】:

我的程序动态创建按钮。

private void CreateButton(string buttonName)
{

   Color[] c = { Color.Red, Color.Teal, Color.Blue, Color.WhiteSmoke };

   transbutton = new Button();
   transbutton.BackColor = c[2];
   transbutton.Text = buttonName;
   transbutton.Name = buttonName + "Button";
   transbutton.Width = 150;
   transbutton.Height = 150;
   transbutton.Font = new Font("Segoe UI", 13);
   transbutton.ForeColor = Color.White;

   transbutton.Click += new EventHandler(transbutton_Click);
}

private void transbutton_Click(object sender, EventArgs e)
{

   tbList.Text = transbutton.Text;
}

我想要做的是当用户点击按钮时,它会将按钮的名称添加到多行文本框中,如上图所示。我创建了一个 EventHandler,但不知道如何使它与动态按钮一起使用。

【问题讨论】:

  • 您是否将按钮添加到屏幕/表单? (我在您的代码中没有看到调用)

标签: c# winforms visual-studio-2010


【解决方案1】:

您有一个作为sender 参数的对在那里单击的按钮的引用。所以...

private void transbutton_Click(object sender, EventArgs e)
    {
       tbList.Text += "\r\n" + ((Button)sender).Text;
    }

【讨论】:

  • 它适用于任何触发事件的事物(例如,所有窗口和 Web 控件)。 sender 参数始终是触发事件的对象,因此您始终可以将其转换为其原始类型并使用其属性;)
【解决方案2】:

像这样使用按钮数组。它将创建 3 个动态按钮 bcoz h 变量的值为 3

public void button_Click(object sender, EventArgs e)
{
 if( sender == buttonArray[0] )
  {


  MessageBox.Show("hello");
   }

 }

private void button1_Click(object sender, EventArgs e)
{

    int h =3;


    Button[] buttonArray = new Button[8];

    for (int i = 0; i <= h-1; i++)
    {
       buttonArray[i] = new Button();
       buttonArray[i].Size = new Size(20, 43);
       buttonArray[i].Name= ""+i+"";
       buttonArray[i].Click += button_Click;//function
       buttonArray[i].Location = new Point(40, 20 + (i * 20));
        panel1.Controls.Add(buttonArray[i]);

    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-02
    • 2017-07-29
    • 1970-01-01
    • 2012-08-17
    • 1970-01-01
    • 1970-01-01
    • 2014-03-12
    相关资源
    最近更新 更多