0

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

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

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

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

1 回答 1

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...
}
于 2017-07-26T19:24:21.317 回答