2017-12-25 5 views

Antwort

1

Tastaturbehandlung für TabControl ist ziemlich ungewöhnlich, löst das KeyDown-Ereignis aus, auch wenn ein untergeordnetes Steuerelement den Fokus hat. Wenn Sie jedoch e.Handled = true festlegen, wird der Tastendruck nicht unterdrückt. Etwas von einem Fehler. Es gibt zwei grundlegende Möglichkeiten, diese Einschränkung zu umgehen: Sie müssen die geschützte ProcessCmdKey() -Methode überschreiben. Die erste besteht darin, eine eigene Klasse aus TabControl abzuleiten, die normalerweise wünschenswert ist, wenn Sie aus anderen Gründen mit dem Steuerelement herumspielen wollen. Wie folgt aus:

using System; 
using System.Windows.Forms; 

public class MyTabControl : TabControl { 
    protected override bool ProcessCmdKey(ref Message msg, Keys keyData) { 
     if (keyData == (Keys.Tab | Keys.Control) || 
      keyData == (Keys.Tab | Keys.Control | Keys.Shift)) { 
      return true; 
     } 
     return base.ProcessCmdKey(ref msg, keyData); 
    } 
} 

Ihr Programm erstellen und die neue Steuerung von der oben in der Toolbox fallen, ersetzt die vorhandenen.

Die andere Möglichkeit ist es, den Tastendruck abzufangen, bevor er das Tab-Steuerelement erreichen kann. Mehr eine Schinderei, da Sie darauf achten müssen, um die Steuerung den Fokus hat und ob es ist ein Kind der Registerkarte, kopieren/fügen Sie diesen Code in das Formular Klasse:

protected override bool ProcessCmdKey(ref Message msg, Keys keyData) { 
    var ctl = this.ActiveControl; 
    while (ctl != null) { 
     if (ctl == myTabControl1) { 
      if (keyData == (Keys.Tab | Keys.Control) || 
       keyData == (Keys.Tab | Keys.Control | Keys.Shift)) { 
       return true; 
      } 
     } 
     ctl = ctl.Parent; 
    } 
    return base.ProcessCmdKey(ref msg, keyData); 
} 

Ersetzen „TabControl1“ mit dem Namen deiner Kontrolle.

Verwandte Themen