制作两个TEdits独家

时间:2012-01-13 15:45:51

标签: delphi text edit

我有两个用于指定文件路径的TEdit框,一个用于UNC路径,另一个用于本地路径。但是,如果用户只能在一个框中输入文本,我希望如此。如果他们在一个框中输入文本,则应清除另一个框。我该怎么做呢?另外,不确定我是否应该使用OnEnter,OnChange或其他方法。

3 个答案:

答案 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;