C#动态按钮事件处理机制

本文关键字:机制 事件处理 按钮 动态 | 更新日期: 2023-09-27 18:19:25

我正在为一个基于用户的应用程序动态创建按钮。现在,我必须通过表单的参数告诉新表单要将哪些文本应用于按钮,然后表单创建按钮。现在我有一个问题——这些按钮的事件:让按钮点击事件通过的最佳机制是什么。我无法从原始表单访问表单,只能传递简单的数据类型(和数组)。

我的第一个想法是使用一个代码来引用静态类中的适当方法——基本上,传递一个带有按钮名称的int数组,它们的onclick处理程序调用一个方法-handle(int代码)->,其中代码在一个巨大的switch语句中用于调用适当的方法。

但我怀疑这是最好的机制。我更喜欢创建一个侦听器,它只侦听按钮单击,如果单击未被处理,请确定单击了哪个按钮并从那里进行管理。

我研究了观察者模式,但我并不完全相信这是最好的模式。问题不是没有解决方案,而是我想要最好的解决方案。

这在C#中是monodroid的,但这些信息的影响应该是最小的。

感谢

C#动态按钮事件处理机制

不确定是否完全理解您的实际问题,但以下是您应该如何处理动态控件和事件处理程序:

Button myNewButton = new Button { Text = "MyCaption" };
myNewButton.Click += (sender, e) =>
    {
        ((Button)sender).Text = "New text here!";
        // Another logic could be put here
    };

如果是WPF,我会使用Commanding,但我不知道它是否适用于monofroid。你可以看看http://www.codeproject.com/KB/dotnet/EventBroker.aspx

目前我有两个选项:

  1. 使用反射-将方法名传递给按钮,然后该按钮可以根据传递的字符串值调用方法。然后简单地创建一个静态类,所有按钮方法都保存在该类中。

  2. 使用switch语句-因为我可以有接受参数的委托(其中一个是SENDER对象),所以我可以很容易地将SENDER对象发送到包含switch语句的方法,该方法基于该对象执行操作。

在我的研究中,我确定前者(反射)是首选,特别是因为按钮的数量相当大。

参考:
http://embeddedgurus.com/stack-overflow/2010/04/efficient-c-tip-12-be-wary-of-switch-statements/
Large Switch语句:糟糕的OOP
方法工厂-案例与反射