form.show将焦点设置为底层Form

时间:2013-05-11 17:04:20

标签: delphi show delphi-5 setfocus

D5pro。

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

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

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

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

OR

Form1.BtnHelpClick(...
  FormHelp.Show;

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

我尝试了Memo1.SetFocus,但这不起作用。

我试过这个Using WM_SETFOCUS and WM_KILLFOCUS但是没有用

我得到一个“无法关注..”错误 How to force a focus on a component before the Form is shown

有人可以告诉我如何将焦点放回Memo1

谢谢。

3 个答案:

答案 0 :(得分:4)

如果控件的窗体没有焦点,则无法在控件上调用SetFocus。在帮助表格显示之后,备忘录的表格不再具有焦点。相反,帮助表格是焦点。

因此将焦点设置回形式:

Form1.ActiveControl := Form1.Memo1;
Form1.SetFocus;

答案 1 :(得分:0)

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

ActiveControl := Memo1;

答案 2 :(得分:0)

FormHelp在显示时获得输入焦点。尝试拨打BringToFront()上的Form1,然后再拨打Memo1.SetFocus()