任意のキーが押下されたタイミングで、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)

製品について

Ultimate UI for Windows Forms