我一直在重构一个旧项目。我发现当老程序员尝试使用时 SetFocus()
,TWinControls
他们用空的 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()
对于控件和父级不起作用,请参见屏幕截图。