2010-06-05 87 views
1

以外的私人控件的EventHandler也许我的设计不好,或者我没有看到明显的解决方案,但我想从form1外部订阅Form1的buttonClick EventHandler。如何订阅除表格

例如我有一个Controller和Form1谁都在主函数中实例化。 现在我想从Controller1的Form1中的Button1_Click buttonClick事件。但button1是declarded私人,所以我不能做

form1->Button1->Click += gcnew EventHandler(controller->function) 

有没有什么办法可以解决这个问题?

好吧我可以写一个setter或Form1的东西,但有没有其他解决方案?

我读了一些例子,但它们都是从同一个类中调用事件,所以它们没有解决我的具体问题。

编辑

也许它帮助,如果我说我真的想实现:

确定存在GUI又名Form1中和电脑板类。

如果用户在GUI上触发特定的ButtonClick事件,Controller应该会收到通知。 此外,Controller在运行时应该能够从不同事件中订阅和取消订阅。为了让它变得更加混乱(至少对我来说),控制器应该引发事件,这会触发一些GUI行为,例如启用某些按钮并禁用其他按钮。 所以这就是我想要做的,至少在理论上它听起来不错,但现在我遇到了实施方面的问题。

回答

2

这是你应该重构的东西当然。向Form1类添加一个事件并让button1的Click事件引发事件。

假设这是困难的:有一个后门,通过公共Controls属性:

form1->Controls["Button1"]->Click += // etc... 
+0

感谢。后门工作谢谢。 给你第一个建议: 我想这是不可能的,如果我想在运行时添加或删除事件?例如,如果用户进行特定操作,我想订阅新的点击事件或取消订阅现有的事件。 – randooom 2010-06-05 16:56:26

+0

那么,为什么不呢?您使用 - =移除事件处理程序。请注意,它是添加/删除事件处理程序的客户端代码,而不是Form1。发布和提升事件是分开的,代码位于Form1中。 – 2010-06-05 17:03:48

+0

对不起,但我不明白。我必须在Form1中为每个ButtonEvent编写一个add(处理程序)和remove(处理程序)方法吗?对不起,但这对我来说都是非常新奇的东西,所以我有点困惑。 – randooom 2010-06-05 17:13:23