【发布时间】:2017-09-14 21:58:41
【问题描述】:
在某些情况下,我的应用程序会在显示另一个表单 (Form1) 后尝试自动打开某个表单 (Form2)。我正在使用onFormActivate 调用ShowModal,但是在显示第二个表单后,它的控件失去了焦点。
复制:
- 创建一个新的 VCL 应用程序;
- 创建第二个表单并将
TEdit放入其中; - 在主窗体上添加一个
onFormActivate监听器;
'
procedure TForm1.FormActivate(Sender: TObject);
begin
Form2.ShowModal;
end;
运行后,您将看到 Form2 正在显示。但是编辑没有得到焦点。
如果我在项目文件中注释MainFormOnTaskbar,它会起作用。
// Application.MainFormOnTaskbar := True;
但这不是我应该改变的。我想了解一下:为什么TEdit 会失去焦点?
【问题讨论】:
-
OnActivate 在焦点切换时发生。当您激活另一个窗口时,您正在中断焦点转移。接下来是不受支持/未定义/不可靠的行为。不要尝试解决方法,以不同的方式实施。
-
感谢@SertacAkyuz。我认为
onActivate发生在焦点改变之后。这就是我使用onActivate而不是onShow的原因。
标签: delphi