如何为按钮C#的列表创建事件列表?

时间:2018-06-25 02:56:26

标签: c# winforms oop user-interface

我有一个按钮列表...但是我想为列表中的每个按钮创建一个事件-我已经尝试了这段代码

ButtonName.Click += (sender, args) =>
            {
                Point p = new Point(20 * j, 70);
                Product[j].Location = p;
                Product[j].Width = 200;
                Product[j].Height = 250;
                this.Controls.Add(Product[j]);
            };

我想做的事件是,当单击任何按钮时,它应该显示一个与此按钮相关的列表框。 每个列表框都有其自己的数据..我要解决的唯一问题是使列表中的每个按钮都发生事件 可能吗??

更新

for (int j = 0; j < Data.BTN_Name.Count; j++) 
{ 
   Category[j].Click += (sender, args) => 
     { 
        Point p = new Point(20 * j, 70); 
        Product[j].Location = p; 
        Product[j].Width = 200; 
        Product[j].Height = 250; 
        this.Controls.Add(Product[j]); 
      }; 

2 个答案:

答案 0 :(得分:1)

在我看来,您想这样做:

        for (int j = 0; j < Data.BTN_Name.Count; j++)
        {
            Product[j] = new ListBox()
            {
                Location = new Point(20 * j, 70),
                Width = 200,
                Height = 250,
                Visible = false,
            };
            this.Controls.Add(Product[j]);
            var captured_j = j;
            Category[j].Click += (s, ea) => Product[captured_j].Visible = true;
        }

您必须捕获j变量才能在事件处理程序中使用它-因此,代码var captured_j = j;就在事件处理程序之前。

答案 1 :(得分:-1)

正如我所看到的,您实际上是在尝试将某个按钮绑定到某个列表框。正如@TheGeneral所说,您可以使用button的Tag属性,但我不喜欢这种方法(尽管它有权利,但这只是习惯问题)。这是我的示例:

public class YourForm : Form
{
    private IDictionary<Button, ListBox> _listboxes = new Dictionary<Button, ListBox>();

    // use this if you create a button and listbox simultaneously
    protected void CreateButtonAndList()
    {
        var listbox = new ListBox();
        // initialize listbox as needed
        var button = new Button();
        // initialize button as needed
        button.Click += ButtonClickHandler;
        _listboxes.Add(button, listbox);
    }

    // use this if you create a button for already existing listbox
    protected void CreateButtonFor(ListBox listbox)
    {
        var button = new Button();
        // initialize button as needed
        button.Click += ButtonClickHandler;
        _listboxes.Add(button, listbox);
    }

    private void ButtonClickHandler(object sender, EventArgs e)
    {
        var listbox = _listboxes[sender];
        // do what you want with listbox
    }
}

还要注意,您可能不需要同时使用CreateButtonAndList()CreateButtonFor()方法。您可能只留下一种适合您的需求。