我正在为基于用户的应用动态创建按钮。现在我必须告诉新表单通过参数到表单应用于按钮的文本,然后表单创建按钮。现在我遇到了一个问题 - 这些按钮的事件:获取按钮点击事件的最佳机制是什么。我无法从原始表单访问表单,我只能传递简单的数据类型(和数组)。
我的第一个想法是使用代码来修改静态类中的相应方法 - 基本上,使用按钮的名称传递一个int数组,并且它们的onclick处理程序调用一个方法 - handle(int code) - >其中代码在巨型switch语句中用于调用适当的方法。
但我怀疑这是最好的机制。我更愿意创建一种只听取按钮点击的侦听器,如果点击未处理,则确定单击了哪个按钮并从那里进行管理。
我看过观察者模式,我并不完全相信这是最好的观察者。问题不在于没有解决方案,问题在于我想要最佳解决方案。
这是单声道的C# - 但这些信息的影响应该是最小的。
由于
答案 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)
目前我有两种选择:
使用反射 - 将方法名称传递给按钮,然后该按钮可以根据传递的字符串值调用方法。然后简单地创建一个静态类,其中保留所有按钮方法。
使用switch语句 - 因为我可以拥有带参数的委托(其中一个是SENDER对象)我可以轻松地将sender对象发送到包含switch语句的方法,该语句根据该对象执行操作
在我的研究中,我已经确定前者(反射)是首选,特别是因为按钮的数量相当大。
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