如何跟踪单击按钮的组件

时间:2012-01-14 01:08:18

标签: c#

我在C#中创建了一个具有多个组件的gui。每个组件都有一个按钮。我想知道点击的按钮来自哪个组件。我不知道开始的组件数量,因为我允许用户添加更多,如果他们想要,所以我不能命名他们或任何东西来弄明白。谢谢!

2 个答案:

答案 0 :(得分:1)

据推测,您可以为每个“组件”挂上按钮的Click事件。

在这种情况下,请在事件处理程序中使用“sender”参数,并根据您(希望)已知的控制树结构从那里解析它。

void button_Clicked(object sender, EventArgs e)
{
    var button = sender as Button;
    var ownerControl = button.Parent as MyControl; // But you may need to walk up more levels if need be... Depends on your UI structure.

    // Do stuff with button and owner control
}

或者更好的是,从你的“组件”中“冒泡”事件,以便它拥有它自己的事件:

public event EventHandler ButtonClicked;

protected virtual void OnButtonClicked()
{
    var handler = ButtonClicked;
    if (handler != null)
    {
        handler(this, EventArgs.Empty);
    }
}

void button_Clicked(object sender, EventArgs e)
{
    OnButtonClicked(); // Bubble the event
}

然后你的主控件(包含所有“组件”)将挂钩每个生成项目的ButtonClicked事件,并可以直接从处理程序的sender参数中找到该项目。

答案 1 :(得分:0)

我建议创建一个例如。 ButtonClicked在每个组件上,然后使用该组件作为事件处理程序中的object sender参数。