2

D5pro。

我有一个主应用程序的子表单,Form1 和一个 Memo1,用户可以添加文本。

我有一个仅用于查看的 FormHelp(包含 MemoHelp.ReadOnly:=True)。

在 Form1 中,可以通过单击 Form1 上的按钮来显示 FormHelp,也可以通过设置中的复选框设置自动显示。

Form1.OnShow...
if FormSetup.cbHelp.Checked then
  FormHelp.Show;

或者

Form1.BtnHelpClick(...
  FormHelp.Show;

在显示帮助窗口后,我想将焦点设置回 Form1 上的 Memo1。

我试过 Memo1.SetFocus 但这不起作用。

用 WM_SETFOCUS 和 WM_KILLFOCUS试过了,但没有用

我收到“无法聚焦..”错误, 如何在显示表单之前强制将焦点放在组件上

有人可以告诉我如何把焦点放回备忘录1

谢谢你。

4

3 回答 3

5

如果控件的窗体没有焦点,则不能在控件上调用 SetFocus。并且在帮助表单显示后,备忘录的表单不再具有焦点。相反,帮助表单具有焦点。

所以将焦点重新设置为表单:

Form1.ActiveControl := Form1.Memo1;
Form1.SetFocus;
于 2013-05-11T19:56:16.353 回答
1

FormHelp显示时获得输入焦点。BringToFront()在调用Form1 之前尝试调用Memo1.SetFocus()

于 2013-05-11T18:50:08.497 回答
0

只需ActiveControl在对象检查器或代码中设置表单:

ActiveControl := Memo1;
于 2013-05-11T18:27:02.287 回答