2012-02-14 58 views
2

具有以下的WinForms對話框的形式,我處理的MyControlGotFocus事件:在Control.GotFocus中檢測用戶是向前還是向後導航?

enter image description here

MyControl從DevExpress的XtraUserControl這反過來從微軟的WinForms標準UserControl派生派生。

我想實現的是,當MyControl獲得焦點,當用戶與標籤MyControl獲得焦點導航,該焦點被轉發到子控件。

我用下面的代碼成功做到這一點:

protected override void OnGotFocus(EventArgs e) 
{ 
    base.OnGotFocus(e); 

    // Forward. 
    foreach (Control control in Controls) 
    { 
     if (control.TabStop) 
     { 
      control.Select(); 
      break; 
     } 
    } 
} 

即如果Button 1關注並且用戶按標籤鍵,則焦點設置爲Button 2

我是不是能夠解決的是用戶是否向後導航。即如果Button 4關注並且用戶按Shift + Tab鍵,則應將焦點設置爲Button 3

我的兩個問題是:

  • 有沒有一種方法來檢測GotFocus事件中的用戶的導航順序?
  • 我是否正確地做到了這一點?也許有一個內置的函數/標誌我可以設置爲MyControl自動將焦點轉移到它的子控件?
+1

這也許有助於http://stackoverflow.com/questions/1804539/how-to-find-previous-active-control-c-sharp – V4Vendetta 2012-02-14 09:25:24

+1

正如你可以用的無用'EventArgs'參數見'GotFocus'事件,你不能說什麼把焦點設置到你的控件上(標籤,狗屎+標籤,左鍵單擊,右鍵單擊....)。沒有任何簡單的方法來做你問AFAIK的問題。 – ken2k 2012-02-14 09:41:51

+1

更大的問題是UserControl如何獲得焦點。它不需要關注焦點,當它將焦點立即傳遞給客戶端控件時。 – 2012-02-14 10:09:27

回答

2

這麼多的可能性:

  • 使用OnLostFocus事件存儲電流控制和計算TAB或SHIFT TAB是否按下

  • 覆蓋ProcessKeyPreview到calc下的動作中進行OnGotFocus(SO answer

  • 倍率ProcessCmdKey如this answer

相關問題