2010-06-05 36 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