Сделайте два TEdits эксклюзивными - PullRequest
1 голос
/ 13 января 2012

У меня есть два блока TEdit, которые я использую для указания путей к файлам, один для путей UNC, другой для локального пути.Однако мне бы хотелось, чтобы пользователь мог вводить текст только в одно поле.Если они вводят текст в одно поле, оно должно очистить другое.Как мне это сделать?Также не уверен, стоит ли мне использовать OnEnter, OnChange или какой-либо другой метод.

Ответы [ 3 ]

2 голосов
/ 13 января 2012

Вы можете сделать это довольно просто. Создайте один обработчик OnChange и назначьте его обоим 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 голос
/ 13 января 2012

Если вы хотите сохранить два поля редактирования, я бы так и сделал.

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;

Вы хотите проверить значение, чтобы случайно не стереть это значение, когда ваши пользователи переходят по вкладкеполя.

0 голосов
/ 13 января 2012

Вы можете подключить оба поля редактирования к следующему событию KeyPress

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
  If Sender = Edit1 then
    Edit2.clear
  else
  if Sender = Edit2 then
    Edit1.clear;
end;
...