我正在为一个基于用户的应用程序动态创建按钮。现在,我必须通过表单的参数告诉新表单要将哪些文本应用于按钮,然后表单创建按钮。现在我有一个问题——这些按钮的事件:让按钮点击事件通过的最佳机制是什么。我无法从原始表单访问表单,只能传递简单的数据类型(和数组)。
我的第一个想法是使用一个代码来引用静态类中的适当方法——基本上,传递一个带有按钮名称的int数组,它们的onclick处理程序调用一个方法-handle(int代码)->,其中代码在一个巨大的switch语句中用于调用适当的方法。
但我怀疑这是最好的机制。我更喜欢创建一个侦听器,它只侦听按钮单击,如果单击未被处理,请确定单击了哪个按钮并从那里进行管理。
我研究了观察者模式,但我并不完全相信这是最好的模式。问题不是没有解决方案,而是我想要最好的解决方案。
这在C#中是monodroid的,但这些信息的影响应该是最小的。
感谢
不确定是否完全理解您的实际问题,但以下是您应该如何处理动态控件和事件处理程序:
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
目前我有两个选项:
-
使用反射-将方法名传递给按钮,然后该按钮可以根据传递的字符串值调用方法。然后简单地创建一个静态类,所有按钮方法都保存在该类中。
-
使用switch语句-因为我可以有接受参数的委托(其中一个是SENDER对象),所以我可以很容易地将SENDER对象发送到包含switch语句的方法,该方法基于该对象执行操作。
在我的研究中,我确定前者(反射)是首选,特别是因为按钮的数量相当大。
参考:
http://embeddedgurus.com/stack-overflow/2010/04/efficient-c-tip-12-be-wary-of-switch-statements/
Large Switch语句:糟糕的OOP
方法工厂-案例与反射