2013-06-02 83 views
2

我有一個TEdit(VisualCLX組件),我想覆蓋onKeyPress事件中TAB鍵的行爲,但是如果我嘗試在KeyPress事件中攔截TAB鍵它不起作用,因爲在TEdit上按Tab鍵時事件未被觸發。在CLX TEdit的KeyPress事件中攔截TAB鍵

如何攔截TEdit控件的KeyPress事件上的TAB鍵?

+0

要實現它呢? –

+0

我想覆蓋選項卡的默認行爲... – aleroot

回答

0

編輯事件不適用於導航鍵Tab,因爲它們不會觸發鍵盤事件。唯一指出這一事實的地方。 Delphi Help TCustomForm.KeyPreview

要測試把3 TEdit(CLX)放在窗體上和TMemo。
標籤順序EDIT1,EDIT2,EDIT3
你可以使用的唯一事件是KeyUp事件

procedure TForm1.Edit1KeyUp(Sender: TObject; var Key: Word; 
    Shift: TShiftState); 
begin 
    Memo1.Lines.Add('Edit1KeyUp'); 
end; 

procedure TForm1.Edit2KeyUp(Sender: TObject; var Key: Word; 
    Shift: TShiftState); 
begin 
    Memo1.Lines.Add('Edit2KeyUp'); 
end; 

procedure TForm1.Edit3KeyUp(Sender: TObject; var Key: Word; 
    Shift: TShiftState); 
begin 
    Memo1.Lines.Add('Edit3KeyUp'); 
    if Key = VK_TAB then begin 
     Edit2.SetFocus; 
    end; 
end; 
  • 將光標EDIT2輸入字段
  • 按shift標籤

    • 光標移至字段編輯1
    • 備註1顯示

      Edit1KeyUp
      Edit1KeyUp

  • 壓片

    • 光標移動到外地EDIT2
    • Memo1顯示

      Edit2KeyUp

  • 壓片

    • 光標試圖移動到外地EDIT3
    • 用命令Edit2.SetFocus;
      我們發送光標回EDIT2
    • Memo1顯示

      Edit3KeyUp

所以用TAB鍵選擇用戶永遠可以離開EDIT2

enter image description here

例如:在Edit3KeyUp事件中,你可以在#9添加到Edit2.Text。

if Key = VK_TAB then begin 
     Edit2.SetFocus; 
     Edit2.Text := Edit2.Text+#9+'<- a Tab here'; 
    end; 

enter image description here

+0

我從來沒有使用過CLX。 CLX和VCL之間的關鍵行爲有什麼不同? –

+0

@ felipe.zkn:沒有與「CLX」合作,所以我不知道確切的區別。但TAB由應用程序管理! –