[英]Problem with OnClick event signature in C++Builder
我想創建一個 function 用另一個替換當前圖像。 問題是我要替換 64 張圖片。 我創建了一個帶有TImage* Sender
參數的 function 但它僅在我將Sender
設置為TObject*
時才有效。
如何更改此 function:
void __fastcall TForm1::Image1Click(TObject *Sender)
{
Sender->Picture->LoadFromFile("puste.bmp");
}
進入這個
void __fastcall TForm1::Image1Click(TImage *Sender)
{
Sender->Picture->LoadFromFile("puste.bmp");
}
我正在使用 VCL 庫。
您不能更改事件處理程序的簽名。 它必須是 VCL 所期望的,在這種情況下由TNotifyEvent
類型定義,這就是OnClick
事件被聲明為:
typedef void __fastcall (__closure *TNotifyEvent)(System::TObject* Sender);
__property System::Classes::TNotifyEvent OnClick = {read=FOnClick, write=FOnClick, stored=IsOnClickStored};
但是,您不需要更改簽名。 所有 VCL 組件都派生自TObject
,並且Sender
參數指向被點擊的控件。 因此,在這種情況下,您可以簡單地使用類型轉換來訪問特定於TImage
的功能,例如:
void __fastcall TForm1::Image1Click(TObject *Sender)
{
static_cast<TImage*>(Sender)->Picture->LoadFromFile("puste.bmp");
}
然后,您可以將此 1 處理程序分配給所有 64 個TImage
控件。
如果您需要區分不同的TImage
控件,您可以使用TImage
的Name
或Tag
屬性來達到此目的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.