代码之家  ›  专栏  ›  技术社区  ›  Auxiliary

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

  •  3
  • Auxiliary  · 技术社区  · 14 年前

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

    多谢

    4 回复  |  直到 14 年前
        1
  •  6
  •   Randolpho    14 年前

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

    例如:

    var handler = new MyEventHandler(MyMethod);
    obj1.MyEvent += handler;
    obj2.MyEvent += handler;
    obj3.MyEvent += handler;
    
        2
  •  3
  •   Auxiliary    14 年前

    我回答自己的问题真傻。我是这样想的:我可以为所有实例在类内部添加事件处理程序。啊!!代码如下:

    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);
            }
    
        }
    
        3
  •  2
  •   Eric    14 年前

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

        4
  •  1
  •   Tahbaza    14 年前

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