如何跟踪单击按钮的组件

本文关键字:单击 按钮 组件 跟踪 何跟踪 | 更新日期: 2023-09-27 18:20:12

我在C#中制作了一个包含多个组件的gui。每个组件都有一个按钮。我想知道被点击的按钮来自哪个组件。我不知道一开始要添加的组件数量,因为如果用户愿意,我允许他们添加更多,所以我无法命名它们或任何东西来计算。谢谢

如何跟踪单击按钮的组件

假设您已经为每个"组件"钩住了按钮的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参数中找到该项。

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