【发布时间】:2013-03-16 01:04:42
【问题描述】:
我一直在重构一个旧项目。我发现当老程序员尝试使用TWinControls 的SetFocus() 时,他们用空catch 块将它们包围在try/catch 中。从而吞下异常。
如果控件启用,程序的默认行为是设置焦点。为了做到这一点,我创建了一个函数,我可以将TWinControl 传递给:
void SafeSetFocus(TWinControl *Control)
{
if(Control->Enabled && Control->Visible)
{
Control->SetFocus();
}
}
此代码适用于大多数程序,但是我发现在一个区域中我仍然得到 Cannot focus a disabled or invisible window 的调试器异常。
我认为问题可能与父母有关,所以我尝试了以下调整:
void SafeSetFocus(TWinControl *Control)
{
if(Control->Enabled && Control->Visible &&
Control->Parent->Enabled && Control->Parent->Visible)
{
Control->SetFocus();
}
}
此更改并未解决问题。正因为如此,我意识到窗口不一定是父窗口。所以我的问题归结为:
有没有办法确定TWinControl 的窗口是什么并检查它是否可见?这假设异常是准确的......否则,如果您知道问题所在,请分享您的知识:)
其他故障排除说明,第 1 部分:
我尝试通过以下代码确定 ParentWindow 的类名:
String parentWindowClassName = ((TObject *)(Control->ParentWindow))->ClassName();
MessageDlg("parentWindowClassName: " + parentWindowClassName, mtInformation, TMsgDlgButtons() << mbOK, 0);
当我运行第一行代码时,它给出了访问冲突...有什么想法可以通过不同的方式来尝试确定信息吗?
其他故障排除说明,第 2 部分:
CanFocus() 仅使用控件不起作用。 CanFocus() 的控件和父级不起作用,请参见屏幕截图。
【问题讨论】:
标签: c++ c++builder