我正在RAD Studio 10.2中使用C ++ Builder。我不确定标题是否正确,但是我想说的是,每当我使用C ++关键字“ this”时,它都会引用我要访问的组件的Parent,但是不是组件本身。
例如,下面的代码更改了表单的颜色和字体颜色,而不是面板的颜色和字体颜色:
void __fastcall TForm1::Panel1MouseEnter(TObject *Sender)
{
this->Color = cl3DLight;
this->Font->Color = clMaroon;
}
此外,如果我做与上述相同的操作,但是省略了关键字“ this”,它仍然会更改窗体的属性,而不是面板的属性(请参见下面的代码)。
void __fastcall TForm1::Panel1MouseEnter(TObject *Sender)
{
Color = cl3DLight;
Font->Color = clMaroon;
}
我该如何编码,以便它访问面板的“颜色”和“字体->颜色”而不是表单?谢谢。
注意:我之所以不这样做的原因是:Panel1->Color = "cl3DLight";
是因为我试图找到一种针对在运行时创建的组件执行此操作的方法。
答案 0 :(得分:2)
Sender
参数表示生成事件的组件。您可以将指针类型转换为适当的类型,以访问该组件的属性。
如果您确定该事件附带的所有内容都是TPanel
,则可以直接进行类型转换(如雷米在下面的评论中指出的那样):
void __fastcall TForm1::Panel1MouseEnter(TObject *Sender)
{
TPanel *panel = static_cast<TPanel *>(Sender);
panel->Color = cl3DLight;
panel->Font->Color = clMaroon;
}
如果对不同的控件类型使用相同的事件处理程序,则可以测试适当的类型:
void __fastcall TForm1::Panel1MouseEnter(TObject *Sender)
{
TPanel *panel = dynamic_cast<TPanel *>(Sender);
if (panel)
{
panel->Color = cl3DLight;
panel->Font->Color = clMaroon;
}
}