【问题标题】:C# create an array of controlsC# 创建控件数组
【发布时间】:2011-01-11 05:17:39
【问题描述】:

是否可以创建控件数组?如果数组中的多个控件共享同一个事件处理程序,有没有办法获取控件的索引?

【问题讨论】:

  • 请定义组件。也许代码示例会有所帮助。
  • 例如:我想在一个表单上有 30 个按钮共享同一个点击事件
  • 点击事件的sender参数会是产生点击的按钮,所以获取索引为Array.IndexOf(buttonArray, sender)
  • 不会引用 Microsoft.VisualBasic 命名空间,因为它可以使用控件数组?

标签: c# winforms user-interface components


【解决方案1】:

这当然是可以做到的。在这种情况下,共享事件处理程序相当容易,因为引发事件的Button 是作为事件参数的一部分发送的。它将是 sender 值,可以转换回 Button

这里是一些示例代码

class Form1 : Form {
  private Button[] _buttons;
  public Form1(int count) { 
    _buttons = new Button[count];
    for ( int i = 0; i < count; i++ ) {
      var b = new Button();
      b.Text = "Button" + i.ToString()
      b.Click += new EventHandler(OnButtonClick);
      _buttons[i] = b;
    }
  }
  private void OnButtonClick(object sender, EventArgs e) {
    var whichButton = (Button)sender;
    ...
  }
}

【讨论】:

  • 这个解决方案对我有用。这正是我想要的。
【解决方案2】:

基于凯文斯的评论:

foreach(Button b in MyForm.Controls.OfType<Button>())
{
    b.Click += Button_Click;
}

void Button_Click(object sender, EventArgs e)
{
    Button clickedButton = sender as Button;
}

【讨论】:

    猜你喜欢
    • 2011-01-13
    • 2016-03-31
    • 2011-06-03
    • 1970-01-01
    • 1970-01-01
    • 2015-07-19
    • 1970-01-01
    • 1970-01-01
    • 2011-08-30
    相关资源
    最近更新 更多