点击Edit2,焦点从Edit1跳到Edit2,
此时触发Edit1的OnExit事件,在处理过程中显示一个模式窗口用于显示处理进度,处理结束后这个模式窗口会自动关闭。
但是,发现Edit2并未获得输入焦点。
如果在OnExit中关闭模式窗口后调用Edit2.SetFocus
输入焦点确实在Edit2中可以输入文本,但是不显示光标。
从Edit2中离开时也不会触发其OnExit事件。
这种情况下,怎么让Edit2能够显示光标,并且在离开时触发OnExit事件呢?
除了SetFocus之外,是不是还要发送什么消息啊!?
用的是Delphi 7
15 个解决方案
#1
up..
#2
检查一下EDIT所在的form的OnActivate事件,那个进度窗口关闭后,回到原窗口时触发了该事件
#3
Edit1的onExit事件中:
Edit2.SetFocus;
Edit2.SelLength:=0;
Edit2.SelStart:=length(Edit1.Text);
Edit2.SetFocus;
Edit2.SelLength:=0;
Edit2.SelStart:=length(Edit1.Text);
#4
赞同smiler007(笑一笑)
#5
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事件的代码有什么限制条件。
怀疑焦点转换的顺序有问题。
其实输入焦点还是在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事件的代码有什么限制条件。
怀疑焦点转换的顺序有问题。
#6
按理form的OnActivate事件应该出现,现在没出现,说明form没有被激活,要写api激活它
#7
to fjx99(fjx99)
这个可能和窗口显示的方式有关系
用ShowModal来显示,form1窗口的焦点其实没有被移走,
form3应该相当于form1内嵌的一个控件
试了在代码中form1.SetFocus,结果还是一样:(
这个可能和窗口显示的方式有关系
用ShowModal来显示,form1窗口的焦点其实没有被移走,
form3应该相当于form1内嵌的一个控件
试了在代码中form1.SetFocus,结果还是一样:(
#8
记得以前有位老兄提出过这问题
好像是delphi的bug
好像是delphi的bug
#9
发现Edit2并未获得输入焦点?
控制onkeypress可以的
控制onkeypress可以的
#10
procedure TForm1.Edit1Exit(Sender: TObject);
var
f:tform;
begin
f := tform.Create(self);
f.ShowModal;
end;
我试过,可以啊,是不是你的modal窗口有问题
var
f:tform;
begin
f := tform.Create(self);
f.ShowModal;
end;
我试过,可以啊,是不是你的modal窗口有问题
#11
to: flyinwuhan(制怒·三思而后行)
看来是bug,有没有相关补丁?
to: whbo(王红波)
不能在OnKeyPress中处理,那样会频繁修改另外一个模块属性。
我是想在新属性完全输入之后将修改一次提交过去。
to: XuDunYu(西门吹雪)
你用的什么版本的?
我用application.messagebox也有问题
看来是bug,有没有相关补丁?
to: whbo(王红波)
不能在OnKeyPress中处理,那样会频繁修改另外一个模块属性。
我是想在新属性完全输入之后将修改一次提交过去。
to: XuDunYu(西门吹雪)
你用的什么版本的?
我用application.messagebox也有问题
#12
没有听说。。。。。相关补丁
创建modal窗口有两种办法,一种是application.createform(...
另一种是:f:tform;
begin
f := tform.Create(self);
f.ShowModal;
你试一下第二种有没有问题?
创建modal窗口有两种办法,一种是application.createform(...
另一种是:f:tform;
begin
f := tform.Create(self);
f.ShowModal;
你试一下第二种有没有问题?
#13
to: whbo(王红波)
不能在OnKeyPress中处理,那样会频繁修改另外一个模块属性。
我是想在新属性完全输入之后将修改一次提交过去。
//可以让这个onKeyPress成为共用的事件
不能在OnKeyPress中处理,那样会频繁修改另外一个模块属性。
我是想在新属性完全输入之后将修改一次提交过去。
//可以让这个onKeyPress成为共用的事件
#14
我也碰到过,可能是个BUG
建议不要用模式窗体显示进程,在同一窗体显示就没有问题,主要是避免在ONEXIT事件里弹出窗口.
建议不要用模式窗体显示进程,在同一窗体显示就没有问题,主要是避免在ONEXIT事件里弹出窗口.
#15
嗯,看来只能放弃模式窗口了。
留待以后研究。
还发现一个有趣的情况。这样跳转到Edit2的时候,如果点击右键显示弹出菜单,然后取消,
还是有可能让Edit2恢复到正常状态的。
留待以后研究。
还发现一个有趣的情况。这样跳转到Edit2的时候,如果点击右键显示弹出菜单,然后取消,
还是有可能让Edit2恢复到正常状态的。
#1
up..
#2
检查一下EDIT所在的form的OnActivate事件,那个进度窗口关闭后,回到原窗口时触发了该事件
#3
Edit1的onExit事件中:
Edit2.SetFocus;
Edit2.SelLength:=0;
Edit2.SelStart:=length(Edit1.Text);
Edit2.SetFocus;
Edit2.SelLength:=0;
Edit2.SelStart:=length(Edit1.Text);
#4
赞同smiler007(笑一笑)
#5
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事件的代码有什么限制条件。
怀疑焦点转换的顺序有问题。
其实输入焦点还是在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事件的代码有什么限制条件。
怀疑焦点转换的顺序有问题。
#6
按理form的OnActivate事件应该出现,现在没出现,说明form没有被激活,要写api激活它
#7
to fjx99(fjx99)
这个可能和窗口显示的方式有关系
用ShowModal来显示,form1窗口的焦点其实没有被移走,
form3应该相当于form1内嵌的一个控件
试了在代码中form1.SetFocus,结果还是一样:(
这个可能和窗口显示的方式有关系
用ShowModal来显示,form1窗口的焦点其实没有被移走,
form3应该相当于form1内嵌的一个控件
试了在代码中form1.SetFocus,结果还是一样:(
#8
记得以前有位老兄提出过这问题
好像是delphi的bug
好像是delphi的bug
#9
发现Edit2并未获得输入焦点?
控制onkeypress可以的
控制onkeypress可以的
#10
procedure TForm1.Edit1Exit(Sender: TObject);
var
f:tform;
begin
f := tform.Create(self);
f.ShowModal;
end;
我试过,可以啊,是不是你的modal窗口有问题
var
f:tform;
begin
f := tform.Create(self);
f.ShowModal;
end;
我试过,可以啊,是不是你的modal窗口有问题
#11
to: flyinwuhan(制怒·三思而后行)
看来是bug,有没有相关补丁?
to: whbo(王红波)
不能在OnKeyPress中处理,那样会频繁修改另外一个模块属性。
我是想在新属性完全输入之后将修改一次提交过去。
to: XuDunYu(西门吹雪)
你用的什么版本的?
我用application.messagebox也有问题
看来是bug,有没有相关补丁?
to: whbo(王红波)
不能在OnKeyPress中处理,那样会频繁修改另外一个模块属性。
我是想在新属性完全输入之后将修改一次提交过去。
to: XuDunYu(西门吹雪)
你用的什么版本的?
我用application.messagebox也有问题
#12
没有听说。。。。。相关补丁
创建modal窗口有两种办法,一种是application.createform(...
另一种是:f:tform;
begin
f := tform.Create(self);
f.ShowModal;
你试一下第二种有没有问题?
创建modal窗口有两种办法,一种是application.createform(...
另一种是:f:tform;
begin
f := tform.Create(self);
f.ShowModal;
你试一下第二种有没有问题?
#13
to: whbo(王红波)
不能在OnKeyPress中处理,那样会频繁修改另外一个模块属性。
我是想在新属性完全输入之后将修改一次提交过去。
//可以让这个onKeyPress成为共用的事件
不能在OnKeyPress中处理,那样会频繁修改另外一个模块属性。
我是想在新属性完全输入之后将修改一次提交过去。
//可以让这个onKeyPress成为共用的事件
#14
我也碰到过,可能是个BUG
建议不要用模式窗体显示进程,在同一窗体显示就没有问题,主要是避免在ONEXIT事件里弹出窗口.
建议不要用模式窗体显示进程,在同一窗体显示就没有问题,主要是避免在ONEXIT事件里弹出窗口.
#15
嗯,看来只能放弃模式窗口了。
留待以后研究。
还发现一个有趣的情况。这样跳转到Edit2的时候,如果点击右键显示弹出菜单,然后取消,
还是有可能让Edit2恢复到正常状态的。
留待以后研究。
还发现一个有趣的情况。这样跳转到Edit2的时候,如果点击右键显示弹出菜单,然后取消,
还是有可能让Edit2恢复到正常状态的。