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

时间:2012-01-05 09:39:24

标签: c# event-handling xamarin.android

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

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

但我怀疑这是最好的机制。我更愿意创建一种只听取按钮点击的侦听器,如果点击未处理,则确定单击了哪个按钮并从那里进行管理。

我看过观察者模式,我并不完全相信这是最好的观察者。问题不在于没有解决方案,问题在于我想要最佳解决方案。

这是单声道的C# - 但这些信息的影响应该是最小的。

由于

3 个答案:

答案 0 :(得分:1)

不确定完全理解你的问题究竟是什么,但是你应该如何处理动态控件和事件处理程序:

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

答案 1 :(得分:1)

如果是WPF,我会使用命令,但我不知道它是否适用于单片机。 您可以查看http://www.codeproject.com/KB/dotnet/EventBroker.aspx

答案 2 :(得分:0)

目前我有两种选择:

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

  2. 使用switch语句 - 因为我可以拥有带参数的委托(其中一个是SENDER对象)我可以轻松地将sender对象发送到包含switch语句的方法,该语句根据该对象执行操作

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

    REFS:
    http://embeddedgurus.com/stack-overflow/2010/04/efficient-c-tip-12-be-wary-of-switch-statements/
    Large Switch statements: Bad OOP?
    Method Factory - case vs. reflection