将自定义事件处理程序添加到动态创建的控件[C#]

时间:2017-02-02 03:51:35

标签: c# winforms dynamic event-handling

我正在开发一个小型桌面GUI,可以动态创建动态分配按钮的网格(自定义大小)。我已经设法让它工作,现在我正在试图找到一种方法来唯一识别每个按钮。

现在,我正在尝试在创建控件时找到一种方法来分配一个事件处理程序,这种方法与所有其他事件处理程序是唯一的,这样当单击按钮时,只有该按钮才会改变颜色。只是为了澄清,这是使用C#作为桌面应用程序,我正在使用winforms。

示例代码:

 buttonArray[i, k] = new Button();
                buttonArray[i, k].Name = "b_" + i.ToString() + "_" + k.ToString();
                //**FIGURE OUT HOW TO PASS THE NAME VARIABLE
                buttonArray[i,k].Click +=delegate
                {
                    MessageBox.Show(i.ToString() + " " + k.ToString());
                    // Change the color of b_xlocation_ylocation
                };

谢谢!

1 个答案:

答案 0 :(得分:0)

我不明白为什么你不能只为每个按钮点击事件附加一个处理程序,并在引发事件时设置颜色。只要您使用事件的sender参数,就只会在单击的按钮上设置颜色。也许你需要提供你想要实现的更多细节。

请尝试以下方法......

        buttonArray[i, k].Click += delegate(object sender, EventArgs e)
        {
            MessageBox.Show(i.ToString() + " " + k.ToString());
            // Change the color of b_xlocation_ylocation

            var buttonThatWasClicked = (Button) sender;
            buttonThatWasClicked.BackColor = Color.Red;
        };