输入框焦点和光标的问题

chenyl 2005-03-18 01:48:11
有两个TEdit,开始焦点在Edit1中
点击Edit2,焦点从Edit1跳到Edit2,
此时触发Edit1的OnExit事件,在处理过程中显示一个模式窗口用于显示处理进度,处理结束后这个模式窗口会自动关闭。
但是,发现Edit2并未获得输入焦点。

如果在OnExit中关闭模式窗口后调用Edit2.SetFocus
输入焦点确实在Edit2中可以输入文本,但是不显示光标。
从Edit2中离开时也不会触发其OnExit事件。

这种情况下,怎么让Edit2能够显示光标,并且在离开时触发OnExit事件呢?
除了SetFocus之外,是不是还要发送什么消息啊!?
用的是Delphi 7
...全文
366 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
todouwang 2005-03-21
  • 打赏
  • 举报
回复
to: whbo(王红波)
不能在OnKeyPress中处理,那样会频繁修改另外一个模块属性。
我是想在新属性完全输入之后将修改一次提交过去。
//可以让这个onKeyPress成为共用的事件
flyinwuhan 2005-03-21
  • 打赏
  • 举报
回复
没有听说。。。。。相关补丁

创建modal窗口有两种办法,一种是application.createform(...
另一种是:f:tform;
begin
f := tform.Create(self);
f.ShowModal;
你试一下第二种有没有问题?
chenyl 2005-03-21
  • 打赏
  • 举报
回复
to: flyinwuhan(制怒·三思而后行)
看来是bug,有没有相关补丁?

to: whbo(王红波)
不能在OnKeyPress中处理,那样会频繁修改另外一个模块属性。
我是想在新属性完全输入之后将修改一次提交过去。

to: XuDunYu(西门吹雪)
你用的什么版本的?
我用application.messagebox也有问题
chenyl 2005-03-21
  • 打赏
  • 举报
回复
嗯,看来只能放弃模式窗口了。
留待以后研究。

还发现一个有趣的情况。这样跳转到Edit2的时候,如果点击右键显示弹出菜单,然后取消,
还是有可能让Edit2恢复到正常状态的。
Heyongfeng 2005-03-21
  • 打赏
  • 举报
回复
我也碰到过,可能是个BUG
建议不要用模式窗体显示进程,在同一窗体显示就没有问题,主要是避免在ONEXIT事件里弹出窗口.
XuDunYu 2005-03-19
  • 打赏
  • 举报
回复
procedure TForm1.Edit1Exit(Sender: TObject);
var
f:tform;
begin
f := tform.Create(self);
f.ShowModal;
end;
我试过,可以啊,是不是你的modal窗口有问题
todouwang 2005-03-18
  • 打赏
  • 举报
回复
发现Edit2并未获得输入焦点?
控制onkeypress可以的
flyinwuhan 2005-03-18
  • 打赏
  • 举报
回复
记得以前有位老兄提出过这问题
好像是delphi的bug
chenyl 2005-03-18
  • 打赏
  • 举报
回复
to fjx99(fjx99)
这个可能和窗口显示的方式有关系
用ShowModal来显示,form1窗口的焦点其实没有被移走,
form3应该相当于form1内嵌的一个控件
试了在代码中form1.SetFocus,结果还是一样:(
fjx99 2005-03-18
  • 打赏
  • 举报
回复
按理form的OnActivate事件应该出现,现在没出现,说明form没有被激活,要写api激活它
chenyl 2005-03-18
  • 打赏
  • 举报
回复
dongliu(竹子)的方法无效,已经试过:(
其实输入焦点还是在Edit2中的,此时输入文本也会正常显示。
但是似乎没有DoEnter,所以之后也不会触发OnExit事件。

进度窗口是自动关闭的,不会触发form的OnActivate事件。
smiler007(笑一笑)的提示也没用。

做了一个很简单的窗口,就两个Edit和一个会自动关闭的弹出窗口。
两个Edit的OnExit用同一个处理
procedure TForm1.Edit2Exit(Sender: TObject);
var
newFocus: TWinControl;
begin
form3.ShowModal;
end;
会发现一个很有趣的现象。
第一次从Edit1跳到Edit2,触发OnExit,光标正常但是无法输入
从Edit2跳回Edit1,触发OnExit,光标也回到Edit1,还是无法输入
再次试图跳到Edit2,光标并不过来,也不触发OnExit,并且选择Edit2的文本,Edit1的光标会跟着走!
是不是Delphi的一个Bug?还是OnExit事件的代码有什么限制条件。
怀疑焦点转换的顺序有问题。
flyinwuhan 2005-03-18
  • 打赏
  • 举报
回复
赞同smiler007(笑一笑)
dongliu 2005-03-18
  • 打赏
  • 举报
回复
Edit1的onExit事件中:

Edit2.SetFocus;
Edit2.SelLength:=0;
Edit2.SelStart:=length(Edit1.Text);
smiler007 2005-03-18
  • 打赏
  • 举报
回复
检查一下EDIT所在的form的OnActivate事件,那个进度窗口关闭后,回到原窗口时触发了该事件
何鲁青 2005-03-18
  • 打赏
  • 举报
回复
up..

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧