从EDIT切换到ListView时的奇怪现象(100分)

  • 主题发起人 主题发起人 peng_qs
  • 开始时间 开始时间
P

peng_qs

Unregistered / Unconfirmed
GUEST, unregistred user!
本人需用一个TEDIT控件允许用户输入一个路径名,然后在一个TLISTVIEW
控件中显示该目录下的全部文件. 为了确保为合法路径,我在EDIT控件的OnExit
事件中进行检查,非法要求用户重新输入,但是我发现一个奇怪现象,即如果用户
输入一个非法路径,然后点击切换到LISTVIEW时,如下代码会被执行两次.
请问各位有何高见避免此现象.

procedure TForm1.Edit1Exit(Sender: TObject);
begin
if not DirectoryExists(Edit1.text) then
begin
MessageDlg('Directory does not exists,please try again.',mtError,[mbok],0);
edit1.setfocus;
exit;
end;
end;
 
我试了一下,代码并没有执行两次啊?
 
我也试过,没有这个问题
 
在该ListViw拥有多个Columns, 并且允许多选,拖拉时就会出现.不信告诉我你的
email,我发给你例子试试.我的email : peng_qs@sina.com
 
还忘了一点即是要点击在ListView中没有Items的地方.
 
怪了,确实有这个问题,而且只是在上述情况才会发生,你先用下面这段代码凑合一下吧 :)

var
Form1: TForm1;
Flag:Boolean;

implementation

{$R *.DFM}

procedure TForm1.Edit1Exit(Sender: TObject);
begin
if Flag then
begin
edit1.setfocus;
Flag:=False;
exit;
end;
if not DirectoryExists(Edit1.text) then
begin
MessageDlg('Directory does not exists,please try again.',mtError,[mbok],0);
edit1.setfocus;
Flag:=True;
exit;
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Flag:=False;
end;

可以不会出现对话框,但是实际OnExit事件还是运行了两次
 
既然用键盘输入,那不如用回车键作为判断?
procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key=vk_return then
if not DirectoryExists(Edit1.text) then
begin
MessageDlg('Directory does not exists,please try again.',mtError,[mbok],0);
edit1.setfocus;
edit1.selectall;
end;
end;
 
感谢教父和cbb关注.
cbb: 你提到的内容我程序中已经有了.我还希望用户不按回车
时切换到其它控件时也能发生变化.
教父: 你的方法我也考虑过.但是如果用户再次点击ListView控件或者
其它控件时该法就会有问题了.
不过还是非常感谢二位.
 
多人接受答案了。
 

Similar threads

D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
851
DelphiTeacher的专栏
D
后退
顶部