【问题标题】:C# - Adding an Event Handler for all instances of a classC# - 为类的所有实例添加事件处理程序
【发布时间】:2011-04-05 06:20:09
【问题描述】:

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

非常感谢

【问题讨论】:

    标签: c# events button event-handling instance


    【解决方案1】:

    您可以将同一个事件处理程序附加到许多事件。

    例如:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案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);
                }
        
            }
        

        【讨论】:

        • 或者你可以直接覆盖OnClick
        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 2010-12-16
          • 1970-01-01
          • 2011-03-10
          • 1970-01-01
          • 2015-02-13
          • 2010-12-04
          • 2014-09-21
          • 1970-01-01
          相关资源
          最近更新 更多