2012-07-25 22 views
0

我有一個事件處理程序作爲窗體的成員函數。我想重新使用這個處理程序來處理來自另一個表單的事件,它包含在它自己的單元中。但是,我無法使用對象檢查器分配處理程序。C++構建器以不同形式重用事件處理程序

在[1]中,雖然我不知道如何適用於C++(builder),但在[1]中,該問題似乎已解決,從而使處理程序的'可見性'成爲第二種形式。

我認爲不要將處理程序定義爲成員函數會更聰明。對此最好的方法是什麼?

感謝和問候

[1] How Do I invoke/call a button click event handler form another handler? (c#)

回答

1

還可以指定在代碼本身的事件處理程序,而無需使用對象檢查。例如,

TButton* pButton = new TButton(NULL); 
    pButton->OnClick = MyCustomButtonClickHandlerFunction; 

當然,您的自定義事件處理程序函數原型必須與所討論的事件處理程序的原型相同。我總是使用這種類型的東西,因爲當你動態創建表單時,無論如何你都無法使用對象檢查器。

在你的情況下,從另一個類中分配事件處理程序可能是不合適的,儘管它取決於類以及函數如何訪問內部成員。如果你可以重新設計處理程序而不是成員函數,我看不出爲什麼你不能在兩個類中使用它。儘管VCL對象通常被動態地創建爲該類的成員變量,但我已經將其他類的成員函數用作窗體和按鈕以及其他GUI對象的事件處理程序。

+0

我試圖執行該處理程序作爲在不同的報頭(funk.c)非成員函數,並將其分配到我的圖表上創建我的形式的格蘭事件 chrtRight-> OnGetAxisLabel = chrtGetAxisLabel; 不幸的是,我得到E2034,從Type1轉換到Type2是不可能的。如果我使用與會員相同的功能,它似乎工作。我想知道爲什麼要轉換(void - > TAxisOnGetLabel)。 – freiform 2012-08-01 12:42:26

相關問題