如何在C ++ Builder

时间:2017-07-25 23:01:03

标签: c++builder vcl c++builder-xe4

我正在使用C ++ Builder XE4 32位VCL平台。我正在为Windows操作系统编写。

我有一个包含很多组件的MainForm。当我按下键盘箭头键并触发Form OnShortCut事件时,如何确定哪个组件具有程序焦点?

我有不同的行动,必须根据哪个组件有焦点。

void __fastcall TMainForm::FormShortCut(TWMKey &Msg, bool &Handled)
{
    //determine which component has the focus.
}

1 个答案:

答案 0 :(得分:1)

使用全局Screen->ActiveControl属性:

  

指示当前哪个控件在屏幕上有输入焦点。

     

阅读ActiveControl以了解当前活动表格中哪个窗口控制对象从键盘接收输入。

void __fastcall TMainForm::FormShortCut(TWMKey &Msg, bool &Handled)
{
    TWinControl *ctrl = Screen->ActiveControl;
    if (ctrl == Control1)
    {
        // do something...
    }
    else if (ctrl == Control2)
    {
        // do something else...
    }
    // and so on...
}

或者,您可以使用表单自己的ActiveControl属性:

  

指定焦点在表单上的控件。

     

使用ActiveControl获取或设置专注于表单的控件。在应用程序中,只有一个控件可以在给定时间具有焦点。

     

如果表单没有焦点,ActiveControl是表单上的控件,当表单获得焦点时,该控件将获得焦点。

void __fastcall TMainForm::FormShortCut(TWMKey &Msg, bool &Handled)
{
    TWinControl *ctrl = this->ActiveControl;
    if (ctrl == Control1)
    {
        // do something...
    }
    else if (ctrl == Control2)
    {
        // do something else...
    }
    // and so on...
}