VB.NET:2個のSpread間での[Enter]キー、矢印キーなどでフォーカス移動を行う方法

2個のSPREADコントロールをフォームに貼って、それぞれ2列×5行のシートを同じ様に設定します。
基本的な設定はSPREADコントロールのデザイナで設定していますが、以下の様な表示になります。

Spread1


今回の動作の想定は以下の様に考えます。
・セルは全てテキスト入力で「←」「→」はセル内での左右移動
・「Tab」、「Enter」、「Ctrl」+「←」、「Ctrl」+「→」はアクティブセルの移動
 但し、左SPREADのDATA2の最下行セルの場合、右SPREADのDATA1の先頭セルに移動
 また、右SPREADのDATA1の先頭セルの場合、左SPREADのDATA2の最下行セルに移動

今回の処理では以下の処理が肝になります。


■初期処理でのSPREADのキー動作設定

そのままですと、矢印キーなどでアクティブセルの移動ができないのでキー制御をフォームロード時に行います。
・入力マップの変更で編集中セルでの「Enter」キー動作を指定します。 ・各セルをTextCellTypeにしますが、「矢印キー」の動作を、「矢印キー」のみはカーソルのセル内のみ左・右移動で、 「Ctrl」+「矢印キー」はセル編集を終了し、アクティブセルのカーソル方向移動に設定します。

■Advanceイベントでの処理

AdvanceイベントはSPREADコントロールからフォーカスが移動する場合に発生します。 今回の場合は以下のキー入力でイベントが発生します。
・DATA1カラムで「Shift」+「←」、「Tab」、「Enter」
・DATA2カラムで「Shift」+「→」、「Tab」、「Enter」
・DATA1カラム及びDATA2カラムの先頭行で「↑」
・DATA1カラム及びDATA2カラムの最下行で「↓」

左SPREADでのAdvanceイベントで、DATA2カラムで最下行の場合、イベントの「e」引数の「Cancel」プロパティを Falseにすることでデフォルト処理をさせることで、右SPREADにフォーカスが移動します。

右SPREADでのAdvanceイベントで、DATA1カラムで先頭行の場合、イベントの「e」引数の「Cancel」プロパティを Falseにすることでデフォルト処理をさせることで、左SPREADにフォーカスが移動します。

■EditModeOnイベントでの処理

尚、現在のセルを分かりやすくするために、EditModeOnイベント(編集開始時処理)で編集中セルの背景色を変更しています。

デル株式会社

■関連記事
VB.NET:SpreadでのEnter時にセルを右移動させる方法
VB.NET:Spreadでフォーカスを持っていない時にセル枠を表示しない設定
VB.NET:Spreadのヘッダカラム及び、通常のカラムの連結
VB.NET:Spreadのシートへの簡単な一覧データの設定について
VB.NET:Spreadのシートのセルにボタン、テキスト、チェックボックスのセルタイプの設定
VB.NET:Spreadのセルのボタンクリック時のイベント処理
VB.NET:Spreadのセルへのデータ設定の描画速度アップ
VB.NET:Spreadのセルのチップウインドウで別に設定された文字列を表示する
VB.NET:Spreadでデータ一覧表示を簡単に行う方法について
VB.NET:Spreadデータ一覧表示での行選択処理(CellDoubleClickイベント , KeyDownイベント)
VB.NET:Spreadデータ一覧表示での行選択処理(CellDoubleClickイベント , KeyDownイベント)その2
VB.NET:Spreadデータ一覧表示での自動ソート実行時に複数のソート条件を指定する方法について
VB.NET:Spreadで異なるSPREADコントロール間でシートデータのコピーを行う方法
VB.NET:SpreadでのCSV出力とCSV入力を使って、異なるSPREADコントロール間でシートデータのコピーを行う方法
VB.NET:SpreadシートのPDF出力と表示を行う方法
VB.NET:Spreadの数値セルタイプを使ってデータメンテナンスのプログラムに使う方法
VB.NET:Spreadのテキストセルでバイト数入力制限を掛ける方法
VB.NET:Spreadのチェックボックス型セルにはCheckChangedイベントを、ボタン型セルにはClickイベントの発生方法


楽天市場

コメント(0)