2017-12-25 33 views
1

PictureofmyissueのVisual Studio 2015のTabControl無効にキーボードショートカットのCtrl + Tabキー&Ctrlキー+ Shift + Tab

私はタブにタブからナビゲートするボタンを作った、私は私かのように見えるナビゲーションプログラムを作成したいですよ私は2015年のVisualスタジオの中にタブコントロールで私のアプリのユーザーからはCtrl +タブ & はCtrl +Shiftキー + タブの使用を無効にすることができますどのように、部屋から部屋に移動するのですか?

答えて

1

TabControlのキーボード処理は非常に珍しく、子コントロールにフォーカスがあってもKeyDownイベントが発生します。 e.Handled = trueに設定しても、キーストロークは抑制されません。バグのビット。この制限を回避する2つの基本的な方法は、保護されたProcessCmdKey()メソッドをオーバーライドすることです。最初は、TabControlから独自のクラスを派生させることです。他の理由でコントロールを修正したい場合は、通常は望ましいです。このように:

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

プログラムをビルドし、ツールボックスの上部から新しいコントロールを削除して、既存のコントロールを置き換えます。

もう1つの方法は、タブコントロールに到達する前にキーストロークを傍受することです。あなたがフォーカスを持っており、それがタブコントロールの子であるかどうかを制御するために注意を払わなければならないことから、コピー/フォームクラスにこのコードを貼り付け強打のより:

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

「tabControl1」を交換してくださいあなたのコントロールの名前。

関連する問題