2009-12-23 11 views
5

Alt text http://i49.tinypic.com/2eqcajp.jpgDesactivar accesos directos predeterminados en un TabControl

Ctrl +PageUp/PageDown y Ctrl +Tab son accesos directos predeterminados para el TabControl. Ayudan a moverse entre pestañas adyacentes. Me gustaría Ctrl + PágX comportamiento de trabajar sólo para las pestañas exteriores (tab1, Sep2) y Ctrl + Tab comportamiento de las pestañas interiores (Tab3, TAB4) cuando mi atención se centra en el control (cuadro de texto aquí). Para esto, necesito deshabilitar el comportamiento predeterminado. Hay alguna manera de hacer esto?

Miré ProcessDialogKey y IsInputKey, pero parecen funcionar solo con datos clave individuales. Los modificadores no son manejados.

Respuesta

10

TabControl tiene un método de atajo de teclado inusual, se reflejan en el método OnKeyDown(). Esto se hizo para evitar que molestara el manejo del teclado para los controles en una página de pestañas.

Tendrá que anular el método. Agregue una nueva clase a su proyecto y pegue el código que se muestra a continuación. Compilar. Coloque el nuevo control desde la parte superior de la caja de herramientas en su 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

Muchas gracias. Eso funciona perfectamente. – tsps

+3

Tenga en cuenta que el código anterior no desactiva todas las teclas rápidas de control de pestañas: aún puede usar ** CTRL + TAB + MAYÚS **, etc. Cambie la instrucción if a continuación: 'if (ke.Control && (ke.KeyCode == Keys.Tab || ke.KeyCode == Keys.Next || ke.KeyCode == Keys.Prior)) return; ' –

+0

Esa tecla de acceso directo pestañas hacia atrás. –

0

Sólo cambia tabpageX.Enabled propiedad a false en su código cuando sea necesario. Luego, usando Ctrl + , la pestaña no podrá seleccionar tabpageX.

Ctrl +Tab a primera vista creó un caos en mi solicitud. Lo usé para guardar mis activos.

4

Como está escrito, la respuesta de Hans Passant no funcionó a menos que estuviera en la última página del control de pestañas. Quiero algo que no permite los accesos directos en ninguna de las pestañas. El código siguiente también incorpora una lógica adicional para manejar de AZ Ctrl +PageUp y Ctrl +PageDown. Esperemos que esta versión haga que la lógica general sea un poco más clara:

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); 
      } 
     } 
    } 
} 
Cuestiones relacionadas