C ++: Как сделать ссылку на компонент VCL самой? - PullRequest
0 голосов
/ 12 октября 2018

Я использую C ++ Builder в RAD Studio 10.2.Я не уверен, правильно ли я спросил это в заголовке, но я пытаюсь сказать, что всякий раз, когда я использую ключевое слово C ++ 'this', оно ссылается на Parent компонента, к которому я пытаюсь получить доступ, ноне сам компонент.

Например, приведенный ниже код изменяет цвет формы *1004* формы и цвет шрифта вместо цвета панели * *1006* и цвета шрифта:

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;
}

Как бы я кодировалтаким образом он получает доступ к Panel 'Color' и 'Font-> Color' вместо формы?Спасибо.

Примечание: Причина, по которой я не просто сделал это как: Panel1->Color = "cl3DLight";, заключается в том, что я пытаюсь найти способ сделать это для компонентов, созданных при запуске-время.

1 Ответ

0 голосов
/ 12 октября 2018

Параметр 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;
    }
}
...