2

我有一个名为的 Windows 窗体Form1,该窗体中的面板名为panel1. 我只使用面板来放置按钮,以便我可以将它们分组并与Form1. 就我的程序而言,我需要处理从内部按钮发出的每个按钮单击panel1。为此,我使用相同的代码片段:

  public Form1()
        {
            InitializeComponent();

            // Set a click event handler for the button in the panel
            foreach (var button in panel1.Controls.OfType<Button>())
            {

                button.Click += HandleClick;
            }
        }

我需要做的是有一种方法来识别确切点击了哪个按钮。为此,我使用了我的处理程序方法:

private void HandleClick(object o, EventArgs e)
{
    MessageBox.Show("HI" + o.ToString());
}

这给了我一些希望,因为我明白了:

在此处输入图像描述

这是第二部分——Text: button4这实际上是足够的信息来继续我的工作。但是如果没有一些复杂的字符串操作,我找不到获取这条信息的方法。那么,鉴于我编写代码的方式,有没有办法获取有关单击按钮的此或其他唯一信息?

4

3 回答 3

4
    private void HandleClick(object sender, EventArgs e)
    {
        var btn = sender as Button;
        if (btn != null)
        {
            MessageBox.Show(btn.Text);
        }
    }
于 2013-01-30T18:37:07.053 回答
3

一种选择是将对象转换为 a Button,但您可以更改事件处理程序的分配方式,而不是进行转换,这样您就不需要首先进行转换:

foreach (var button in panel1.Controls.OfType<Button>())
{
    button.Click += (_,args)=> HandleClick(button, args);
}

然后只需将签名更改HandleClick 为:

private void HandleClick(Button button, EventArgs e);
于 2013-01-30T18:36:50.297 回答
2

您需要强制sender转换为Button该类,以便您可以访问其属性:

Button b = (Button)sender;
MessageBox.Show(b.Text);
于 2013-01-30T18:36:23.467 回答