任意のキーが押下されたタイミングで、UltraTabbedMdiManager のアクティブタブを切り替える方法を紹介します。大きく分けて、プロパティ設定と、KeyDown イベント内での処理制御があります。
プロパティ設定
フォームの IsMdiContainer プロパティ、KeyPreview プロパティをそれぞれ有効化(true に設定)します。
C#
private void Form1_Load(object sender, EventArgs e) { //MDI 子フォームのコンテナーとするプロパティ設定 this.IsMdiContainer = true; //フォームでキーイベントを捕捉するためのプロパティ設定 this.KeyPreview = true; ... }
VB.NET
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load 'MDI 子フォームのコンテナーとするプロパティ設定 IsMdiContainer = True 'フォームでキーイベントを捕捉するためのプロパティ設定 KeyPreview = True ... End Sub
KeyDown イベント内の処理制御
MDI の親フォームの KeyDown イベントを捕捉し、アクティブタブの制御を行います。タブの Activate メソッドを呼び出すことで、タブをアクティブな状態にすることができます。
C#
private void Form1_KeyDown(object sender, KeyEventArgs e) { var tabs = this.ultraTabbedMdiManager1.TabGroups[0].Tabs; var activeTab = this.ultraTabbedMdiManager1.ActiveTab; //Home 押下時に、先頭タブをアクティブ化する。 if (e.KeyData == Keys.Home) { tabs[0].Activate(); } //End 押下時に、最終タブをアクティブ化する。 if (e.KeyData == Keys.End) { tabs[tabs.Count - 1].Activate(); } //PageUp 押下時に、アクティブタブを次に移動する。 if (e.KeyData == Keys.PageUp) { //最終タブがアクティブタブの場合、先頭タブをアクティブ化する。 if (activeTab.Index == tabs.Count - 1) { tabs[0].Activate(); } else { tabs[activeTab.Index + 1].Activate(); } } //PageDown 押下時に、アクティブタブを前に移動する。 if (e.KeyData == Keys.PageDown) { //先頭タブがアクティブタブの場合、最終タブをアクティブ化する。 if (activeTab.Index == 0) { tabs[tabs.Count - 1].Activate(); } else { tabs[activeTab.Index - 1].Activate(); } } }
VB.NET
Private Sub Form1_KeyDown(sender As Object, e As KeyEventArgs) Handles MyBase.KeyDown Dim tabs = Me.UltraTabbedMdiManager1.TabGroups(0).Tabs Dim activeTab = Me.UltraTabbedMdiManager1.ActiveTab 'Home 押下時に、先頭タブをアクティブ化する。 If e.KeyData = Keys.Home Then tabs(0).Activate() End If 'End 押下時に、最終タブをアクティブ化する。 If e.KeyData = Keys.End Then tabs(tabs.Count - 1).Activate() End If 'PageUp 押下時に、アクティブタブを次に移動する。 If e.KeyData = Keys.PageUp Then '最終タブがアクティブタブの場合、先頭タブをアクティブ化する。 If activeTab.Index = tabs.Count - 1 Then tabs(0).Activate() Else tabs(activeTab.Index + 1).Activate() End If End If 'PageDown 押下時に、アクティブタブを前に移動する。 If e.KeyData = Keys.PageDown Then '先頭タブがアクティブタブの場合、最終タブをアクティブ化する。 If activeTab.Index = 0 Then tabs(tabs.Count - 1).Activate() Else tabs(activeTab.Index - 1).Activate() End If End If End Sub
サンプルアプリケーション(ソースコード)のダウンロード
igjp-kb-winforms/kb10146-UltraTabbedMdiManager-switch-active-tabs (github.com)