如何订阅Form之外的私有控件的EventHandler

时间:2010-06-05 16:35:24

标签: winforms events delegates

也许我的设计不好,或者我没有看到明显的解决方案,但我想从form1外部订阅一个buttonClick的Form1的EventHandler。

例如,我有一个Controller和Form1,它们都在main函数中实例化。 现在我想从Controller订阅一个函数到Form1中Button1_Click的buttonClick事件。但是button1被声明为私有,所以我无法做到

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

有没有办法解决这个问题?

好的我可以在Form1中写一个setter或者其他东西,但还有其他解决方案吗?

我读了一些例子,但他们都是在同一个班级内调用事件,所以他们没有解决我的具体问题。

修改

如果我说出我真正想要达到的目标,也许会有所帮助:

好的还有GUI aka Form1和Conroller Class。

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

1 个答案:

答案 0 :(得分:2)

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

假设这很困难:公共控制财产有一个后门:

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