2009-12-23 2 views
5

Alt text http://i49.tinypic.com/2eqcajp.jpgDisattiva scorciatoie predefinite in un TabControl

Ctrl +PaginaSu/PageDown e Ctrl +Tab sono scorciatoie predefinite per la TabControl. Aiutano a spostarsi tra le schede adiacenti. Vorrei Ctrl + pageX comportamento di lavorare solo per le schede esterne (TAB1, Tab2) e Ctrl + Tab comportamento per le schede interne (TAB3, TAB4) quando la mia attenzione è nel controllo (textbox Qui). Per questo, ho bisogno di disabilitare il comportamento predefinito. C'è un modo per farlo?

Ho esaminato ProcessDialogKey e IsInputKey, ma sembrano funzionare solo con singoli dati chiave. I modificatori non sono gestiti.

risposta

10

TabControl ha un'elaborazione di scorciatoia da tastiera insolita, si riflettono sul metodo OnKeyDown(). Questo è stato fatto per evitare di disturbare la gestione della tastiera per i controlli su una pagina di tabulazione.

È necessario sovrascrivere il metodo. Aggiungi una nuova classe al tuo progetto e incolla il codice mostrato di seguito. Compilare. Rilascia il nuovo controllo dalla parte superiore della casella degli strumenti sul tuo Form.

using System; 
using System.Windows.Forms; 

class MyTabControl : TabControl { 
    protected override void OnKeyDown(KeyEventArgs e) { 
    if (e.KeyData == (Keys.Tab | Keys.Control) || 
     e.KeyData == (Keys.PageDown | Keys.Control)) { 
     // Don't allow tabbing beyond last page 
     if (this.SelectedIndex == this.TabCount - 1) return; 
    } 
    base.OnKeyDown(e); 
    } 
} 
+0

Grazie mille. Funziona perfettamente. – tsps

+3

Nota che il codice sopra non disabilita tutti i tasti di scelta rapida per il controllo struttura: puoi ancora usare ** CTRL + TAB + MAIUSC ** ecc. Cambia l'istruzione if in basso: 'if (ke.Control && (ke.KeyCode == Keys.Tab || ke.KeyCode == Keys.Next || ke.KeyCode == Keys.Prior)) return; ' –

+0

Questo tasto di scelta rapida riporta le schede all'indietro. –

0

Basta cambiare tabpageX.Enabled proprietà false nel codice quando richiesto. Quindi utilizzando Ctrl + Scheda non sarà possibile selezionare tabpageX.

Ctrl +Tab al primo sguardo ha creato un caos sulla mia domanda. L'ho usato per salvare le mie risorse.

4

Come scritto, la risposta di Hans Passant non ha funzionato a meno che non fossi sull'ultima pagina del controllo struttura a schede. Voglio qualcosa che non consente le scorciatoie su nessuna delle schede. Il codice qui sotto incorpora anche logica aggiuntiva di AZ di gestire Ctrl +PageUp e Ctrl +PageDown. Speriamo che questa versione renda un po 'più chiara la logica generale:

using System.Windows.Forms; 

namespace MyNameSpace 
{ 
    internal class NoTabTabControl : TabControl 
    { 
     /// <summary> 
     /// Intercept any key combinations that would change the active tab. 
     /// </summary> 
     protected override void OnKeyDown(KeyEventArgs e) 
     { 
      bool changeTabKeyCombination = 
       (e.Control 
        && (e.KeyCode == Keys.Tab 
         || e.KeyCode == Keys.Next 
         || e.KeyCode == Keys.Prior)); 

      if (!changeTabKeyCombination) 
      { 
       base.OnKeyDown(e); 
      } 
     } 
    } 
}