在Delphi中,我有两个编辑框和一个按钮。
默认选择Edit1。我想用消息改变焦点。但是,如果我按照下面的说法进行操作,那么编辑中的选择范围,错误框中的插入符等都会搞砸。
我正在使用消息的原因是我可以在外部应用程序中控制焦点。这看起来似乎有效,但很明显,Windows内部状态有点混乱。我没有外部程序的来源。
procedure TForm1.Button1Click(Sender: TObject);
begin
PostMessage(edit1.handle,WM_KILLFOCUS,0,0);
PostMessage(edit2.handle,WM_SETFOCUS,0,0);
end;
......那可以吗?我错过了一条消息吗?
答案 0 :(得分:8)
WM_SETFOCUS和WM_KILLFOCUS分别是Windows在接收和丢失输入焦点时发送给窗口句柄的通知消息,您不应自己发布这些消息。相反,只需致电SetFocus(edit2.handle)
或edit2.SetFocus()
即可设置焦点。
如果出于某种原因,您无法通过按钮单击处理程序同步执行此操作,则可以将自定义消息发布到您自己的表单中的本地消息处理程序,并从该消息处理程序进行SetFocus调用。