我有两个用于指定文件路径的TEdit框,一个用于UNC路径,另一个用于本地路径。但是,如果用户只能在一个框中输入文本,我希望如此。如果他们在一个框中输入文本,则应清除另一个框。我该怎么做呢?另外,不确定我是否应该使用OnEnter,OnChange或其他方法。
答案 0 :(得分:2)
你可以很简单地做到这一点。创建一个OnChange处理程序,并使用Object Inspector的Events选项卡将其分配给两个TEdits。然后你可以使用以下内容:
procedure TForm1.EditChanged(Sender: TObject); //Sender is the edit being changed
begin
if Sender = UNCEdit then // If it's is the UNCEdit being changed
begin
LocalPathEdit.OnChange := nil; // Prevent recursive calling!
LocalPathEdit.Text := ''; // Clear the text
LocalPathEdit.OnChange := EditChanged; // Restore the event handler
end;
else
begin
UNCEdit.OnChange := nil;
UNCEdit.Text := '';
UNCEdit.OnChange := EditChanged;
end;
end;
这可以稍微简化,但对其他人来说并不那么可读。它也可以通过try..finally进行保护,但是为了简单地清除编辑的文本内容,它并不是真正需要的。
procedure TForm1.EditChanged(Sender: TObject);
var
TmpEdit: TEdit;
begin
if Sender = UNCEdit then
TmpEdit := LocalPathEdit
else
TmpEdit := UNCEdit;
TmpEdit.OnChange := nil;
try
TmpEdit.Text := '';
finally
TmpEdit.OnChange := EditChanged;
end;
end;
答案 1 :(得分:1)
如果你想保留两个编辑框,我就是这样做的。
procedure TForm1.Edit1Exit(Sender: TObject);
begin
if (Edit1.text <> '') then
Edit2.text:= '';
end;
procedure TForm1.Edit2Exit(Sender: TObject);
begin
if (Edit2.text <> '') then
Edit1.text:= '';
end;
您需要进行值检查,以便在用户选中字段时不会意外擦除值。
答案 2 :(得分:0)
您可以将两个编辑框挂钩到以下KeyPress事件
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
If Sender = Edit1 then
Edit2.clear
else
if Sender = Edit2 then
Edit1.clear;
end;