GrapeCity.devlog

グレープシティ株式会社のDeveloper Tools〈開発支援ツール〉の最新情報をお届けします。製品のTIPSや発売情報、イベントのお知らせなどをいち早く発信中です。

Tabキーで先頭/最終セルから前/次のコントロールに移動

こんにちは。SPREAD for WPFを担当している高橋です。 今回も、Windows FormsやASP.NETとの共通機能だけども、WPFでは設定方法が若干異なるという機能について紹介したいと思います。

Windows Forms 10.0JとASP.NET 10.0Jでは、最終セルがアクティブのときにTabキーの押下で次のコントロールにフォーカス移動、また先頭セルがアクティブのときにShift+Tabキーの押下で前のコントロールに移動するという新機能が追加されました。 どちらもプロパティを設定することでこの動作を制御します。

実はこの機能、WPF版では1.0Jですでに搭載済みです。ただし、プロパティではなくコマンド機能を使用します。 WPFには、コマンドという概念があり、このコマンドを呼び出すことにより様々な処理を実行できます。代表的なコマンドの例として、[コピー][切り取り][貼り付け]といった動作があります。 コマンドとショートカットキーを関連付けると、そのキーが押されたときにコマンドが実行されます。[Ctrl+C][Ctrl+X][Ctrl+V]キー が押下されると、[コピー][切り取り][貼り付け]が実行されるといった具合です。

SPREAD for WPFにはよく利用される動作があらかじめコマンドとして用意されています。[コピー][切り取り][貼り付け]といった動作は、既定で[Ctrl+C][Ctrl+X][Ctrl+V]キーが割り当てられています。

本題の「次のセルに移動、最後のセルの場合は次のコントロールに移動」および「前のセルに移動、先頭のセルの場合は前のコントロールに移動」という動作ですが、SpreadNavigationCommandsクラスに「MoveNextThenControl/MovePreviousThenControl」というコマンドが用意されてます。このコマンドに[Tab]および[Shift+Tab]キーを割り当てることで、動作を実行することができます。

コマンドをキーに割り当てるには、.NET FrameworkのInputBinding クラスを使用します。

Visual Basic

GcSpreadGrid1.InputBindings.Add(New KeyBinding(GcSpreadGrid1.NavigationCommands.MoveNextThenControl, New KeyGesture(Key.Tab)))
GcSpreadGrid1.InputBindings.Add(New KeyBinding(GcSpreadGrid1.NavigationCommands.MovePreviousThenControl, New KeyGesture(Key.Tab, ModifierKeys.Shift)))

C#

gcSpreadGrid1.InputBindings.Add(new KeyBinding(gcSpreadGrid1.NavigationCommands.MoveNextThenControl, new KeyGesture(Key.Tab)));
gcSpreadGrid1.InputBindings.Add(new KeyBinding(gcSpreadGrid1.NavigationCommands.MovePreviousThenControl, new KeyGesture(Key.Tab, ModifierKeys.Shift)));

XAMLで設定することもできます。

XAML

<sg:GcSpreadGrid x:Name="gcSpreadGrid1">
     <sg:GcSpreadGrid.InputBindings>
        <KeyBinding Key="Tab" Modifiers="Shift" 
          Command="{Binding Path=NavigationCommands.MovePreviousThenControl, ElementName=gcSpreadGrid1}" />
        <KeyBinding Key="Tab" 
          Command="{Binding Path=NavigationCommands.MoveNextThenControl, ElementName=gcSpreadGrid1}"/>
    </sg:GcSpreadGrid.InputBindings>
</sg:GcSpreadGrid>

SelectionUnitプロパティをRowやColumnに設定するなど、選択要素の単位を行や列にした場合のTabキー動作の実装方法や、別のコマンドの利用方法など、弊社Webサイトのナレッジベースでも公開しています。 よかったらこちらも是非ご参考にしてみてください。

Copyright © GrapeCity, Inc. All Rights Reserved.