2012-01-13 52 views
1

我有兩個TEdit框用於指定文件路徑,一個用於UNC路徑,另一個用於本地路徑。但是,如果用戶只能在一個框中輸入文本,我希望它。如果他們在一個框中輸入文本,則應該清除另一個文本。我應該如何去做這件事?此外,不知道我是否應該使用OnEnter,OnChange或其他方法。使兩個TEdits獨佔

+1

'OnExit'是你應該考慮的情況下,我想。 – Pateman 2012-01-13 15:48:36

+6

可能'OnChange'會起作用。我只是簡單地提供兩個額外的單選按鈕並強制用戶選擇一個.. – 2012-01-13 15:48:49

+1

我與Sertac合作。一個TEdit,兩個單選按鈕。順便說一句,這是UNC和本地路徑之間的區別? – kobik 2012-01-13 15:57:49

回答

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; 
+0

這裏用D7,設置'Text'屬性確實會觸發'OnChange'事件,所以你可以忽略遞歸預防。 'Edit.Clear'雖然觸發OnChange! – NGLN 2012-01-13 18:00:24

+0

如果我記得正確的話,有幾個版本的Delphi確實叫它(儘管我可能是錯的)。儘管如此,它不會損害任何東西,以確保它不會出現問題。 :)清理/恢復事件處理程序沒有任何開銷。 – 2012-01-13 18:03:19

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; 

您希望進行值檢查,以便在用戶選項卡通過字段時不會意外擦除值。

0

你可以大鉤編輯框下面的按鍵響應事件

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

你不需要類型轉換; Sender = Edit1'的平等性沒有它,因爲你正在比較兩個TObject指針的地址。 – 2012-01-13 21:34:02

+0

好抓,固定。 – 2012-01-13 23:34:06