C# - 为类的所有实例添加事件处理程序

时间:2010-08-28 19:42:04

标签: c# events button event-handling instance

我必须在WPF中向表单添加未知数量的按钮(它实际上是一个动态加载其元素的工具箱)。我正在寻找一种方法为所有这些实例制作一个事件处理程序。这可能吗?它们不仅仅是按钮,它是一个继承Button类并具有一些其他成员变量的类。我是否能够在每个实例的事件处理程序中访问这些变量。如果它有帮助或以某种方式相关,我不得不说我不知道​​代表们在C#中是什么。

非常感谢

4 个答案:

答案 0 :(得分:6)

您可以将相同的事件处理程序附加到许多事件中。

例如:

var handler = new MyEventHandler(MyMethod);
obj1.MyEvent += handler;
obj2.MyEvent += handler;
obj3.MyEvent += handler;

答案 1 :(得分:3)

我回答自己的问题是多么愚蠢。我这样想:我可以在类本身内为所有实例添加事件处理程序。咄!这是代码:

public class Tool_Button:Button{
        public String tool_name;
        public Tool_Button(String toolname) {
            this.Width = 32;
            this.Height = 32;
            this.BorderBrush = Brushes.Gray;
            tool_name = toolname;
            this.Background = new ImageBrush(new BitmapImage(new Uri(tool_name)));
            this.Click += new RoutedEventHandler(Tool_Button_Click);
        }

        void Tool_Button_Click(object sender, RoutedEventArgs e)
        {
            MessageBox.Show(tool_name);
        }

    }

答案 2 :(得分:2)

是的,假设方法/属性是公共的,您应该能够访问派生按钮类的自定义属性。事件处理程序的方法签名很可能包括 Handler(object sender, EventArgs e) ,在这种情况下,您可以将发件人转换为派生按钮的类型。

答案 3 :(得分:1)

您可以实现一个类工厂类,以根据需要实例化和配置每个按钮实例(在您的情况下添加事件处理程序关联)。这将允许您在一个位置编写配置代码,并确保每次都使用正确的设置实例化按钮。