C++Builder中的OnClick事件签名存在问题
Problem with OnClick event signature in C++Builder
我想创建一个函数,用另一个替换当前图像。问题是我有64张照片要替换。我创建了一个带有TImage* Sender
参数的函数,但只有当我将Sender
设置为TObject*
时,它才能工作。
如何更改此功能:
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
属性。
相关文章:
- C++Builder中的OnClick事件签名存在问题
- 在 C++ 中使用逗号的 echo 命令中存在问题
- Malloc 在使用线程并行化 SSH 调用时存在问题
- 构造函数 (C++) 中的 char 指针参数存在问题
- 在 boost::variant 中类 holden 的复制构造函数存在问题
- 用户定义的文本运算符(在原始模式下)存在问题
- C++中的数组存在问题
- C++中的正则表达式存在问题
- 英特尔 DAAL 头文件可能存在问题
- 错误:"参数"没有命名类型,.cpp和 .h 文件可能存在问题
- 我的 IF 语句中存在问题,否则无法正常工作
- 在 c++ 中具有多个参数构造函数的模板类存在问题
- template_back和move赋值构造函数存在问题
- CMake 3.13.2 似乎在 G++ 8.2.0 中存在问题
- 使用Boost的班级名称冲突是否存在问题
- CMAKE:目标依赖项存在问题(add_dependency不起作用?
- C SQLITE3代码似乎在准备声明方面存在问题
- 此UUID生成代码是否存在问题
- 派生类中的模板存在问题
- 从多线程.net应用程序调用的本机dll中的tbb存在问题