選択範囲
ReoGrid では選択範囲の制御、スタイルの設定、選択範囲が変更された場合のイベントなどの機能を提供しています。
選択範囲の取得と設定
ワークシートのプロパティ SelectionRange
を利用すると選択範囲の設定と取得ができます。
// 選択範囲を取得
var range = worksheet.SelectionRange;
// 選択範囲を設定
worksheet.SelectionRange = new RangePosition("A1:D5");
選択範囲の表示形式
ワークシートの SelectionStyle
に WorksheetSelectionStyle
列挙体の値を設定すると選択範囲の表示形式を変更できます。
worksheet.SelectionStyle = WorksheetSelectionStyle.FocusRect;
選択範囲の表示形式には以下の三つがあります。
SelectionStyle
に None
を設定すると画面に選択範囲を表示しません。
選択範囲のスタイルが変更された場合、ワークシートの SelectionStyleChanged
イベントが発生します。
選択範囲のスタイル
ReoGrid ではコンポーネント全体の外観スタイルを変更するためのインターフェイスを提供しています。
コンポーネントのプロパティ ControlStyle
にアクセスすると行列ヘッダーの背景色、テキスト色、ワークシートの背景色などを設定できます。
以下のソースコードは、選択範囲の色を赤、罫線の太さを 1 ピクセルに変更する場合を示します。
// コンポーネントの外観スタイルオブジェクトを取得
var controlStyle = reoGridControl.ControlStyle;
// 半透明色を作成
var semiTransparentColor = Color.FromArgb(100, Color.LightGoldenrodYellow);
// 選択範囲の外観スタイルを設定
controlStyle.SetColor(ControlAppearanceColors.SelectionFill, semiTransparentColor);
controlStyle.SetColor(ControlAppearanceColors.SelectionBorder, Color.DarkRed);
controlStyle.SelectionBorderWidth = 1;
選択範囲の操作モード
ワークシートのプロパティ SelectionMode
に WorksheetSelectionMode
列挙体の値を設定すると選択範囲の操作モードを変えられます。
sheet.SelectionMode = WorksheetSelectionMode.Cell;
選択範囲の操作モードは以下の通りです。
列挙体の値 | 説明 |
---|---|
None | 選択範囲を禁止(画面上での選択と表示はなし) |
Cell | セルまたは結合したセルのみ選択できる(範囲の選択を禁止) |
Range | 範囲の自由選択(デフォルトの場合) |
Row | 常に1行の全てのセルを選択 |
Column | 常に1列の全てのセルを選択 |
画面上で一つのセルしか選択できないように設定したい場合、SelectionMode
を Cell
に設定します。画面上での選択と表示を禁止したい場合、SelectionMode
を None
に設定します。
選択範囲の操作モードを変更した場合、ワークシートの SelectionModeChanged
イベントが発生します。
選択範囲変更のイベント
SelectionRangeChanged イベント
選択範囲が変更された場合、SelectionRangeChanged
イベントが発生します。イベント処理のサンプルコードは以下の通りです。
C#
worksheet.SelectionChanged += (s, e) => MessageBox.Show(worksheet.SelectionRange.ToAddress());
VB.NET
AddHandler worksheet.SelectionRangeChanged, Sub(s, e) MessageBox.Show(e.Range.ToAddress())
SelectionRangeChanging イベント
SelectionRangeChanged
イベントは、選択範囲の変更を完了した時点で発生するイベントです。マウスで選択範囲をドラッグして変更する間に、SelectionRangeChanging
イベントが複数回発生します。
範囲を選択する流れは以下の通りです。
- 開始位置をクリックし、一つのセルを選択します。選択範囲を変更したため
SelectionChanged
イベントが発生します。 - ワークシートでマウスをドラッグして選択範囲を変更している間、
SelectionChanging
イベントが発生します。 - マウスをリリースします。最終的に選択範囲が確定されたため、
SelectionChanged
イベントが発生します。
SelectionRangeChanged
と SelectionRangeChanging
イベントは、前回イベントが発生した選択範囲と違う範囲の場合でのみ発生します。マウスがいくら移動しても前回と同じ範囲であれば発生しません。
選択範囲の制御
指定したセルを選択できないように制御したり、選択範囲の操作をキャンセルしたりするには、イベント BeforeSelectionRangeChange
を利用します。このイベントは選択範囲が変更される前に発生します。
イベントのプロパティ StartRow
、StartColumn
、EndRow
および EndColumn
は適用する選択範囲です。IsCancelled
プロパティに true
を設定すると、該当選択範囲の変更操作をキャンセルできます。
使用例:選択範囲を最大5行までに制御する
イベントを処理します。
worksheet.BeforeSelectionRangeChange += worksheet_BeforeSelectionRangeChange;
選択した開始位置と終了位置は上下逆の場合があるため、Math.Abs
を利用して選択された行数を計算します。行数が5行より多い場合終了位置を5行までに変更します。
void worksheet_BeforeSelectionRangeChange(object sender, BeforeSelectionChangeEventArgs e)
{
int rows = Math.Abs(e.StartRow - e.EndRow);
if (rows >= 5)
{
if (e.EndRow > e.StartRow) {
e.EndRow = e.StartRow + 5 - 1;
} else {
e.EndRow = e.StartRow - 5 + 1;
}
}
}
フォーカスセル
フォーカスセルは編集操作の対象セルです。1セルしか含まず、常に選択範囲の中にあります。選択範囲が変更された場合、フォーカスも移動されます。フォーカスが変更された場合、そのフォーカスセルが選択範囲となります。
フォーカスセルの取得と設定
ワークシートの FocusPos
プロパティにアクセスすると、フォーカスセルの取得と設定ができます。
var focusPos = sheet.FocusPos; // 取得
sheet.FocusPos = new CellPosition("D5"); // 設定
VB.NET:
Dim focusPos = sheet.FocusPos ' 取得
sheet.FocusPos = new CellPosition("D5") ' 設定
フォーカスセルの移動方向
Enter キーを押してセルの編集を終了した場合、フォーカスセルは次のセルに移動します。デフォルトでは、フォーカスセルは編集したセルの右側のセルとなります。ワークシートのプロパティ SelectionForwardDirection
を設定すると、フォーカスセルの移動方向を変えられます。
sheet.SelectionForwardDirection = SelectionForwardDirection.Down;
SelectionForwardDirection
が Right
の場合
Enter と Shift+Enter を押した場合フォーカスは左右に移動します。
SelectionForwardDirection
が Down
の場合
Enter と Shift+Enter を押した場合フォーカスは上下に移動します。
フォーカスセルが右または下に移動した場合、SelectionMovedForward
イベントが発生します。フォーカスセルが左または上に移動した場合、SelectionMovedBackward
イベントが発生します。
フォーカスセルの表示設定
ワークシートのプロパティ FocusPosStyle
を設定するとフォーカスの表示スタイルを変更できます。FocusPosStyle
に設定する値は FocusPosStyle
列挙体の値のいずれかです。
列挙体の値 | 説明 |
---|---|
Default | デフォルトのスタイル |
None | フォーカスを非表示 |
プログラムで選択範囲とフォーカスセルを移動
ワークシートで提供される以下のメソッドを利用すると、プログラムでフォーカスセルを移動できます。
メソッド名 | 移動方向 |
---|---|
MoveSelectionForward | 前進(移動方向がRightの場合右、Downの場合下) |
MoveSelectionBackward | 後退(移動方向がRightの場合左、Downの場合上) |
MoveSelectionUp | 上 |
MoveSelectionDown | 下 |
MoveSelectionLeft | 左 |
MoveSelectionRight | 右 |
MoveSelectionHome | rowOrColumn を Row に渡すと行の先頭に、Column を渡すと列の先頭に |
MoveSelectionEnd | 同上 |
MoveSelectionPageDown | 次ページ |
MoveSelectionPageUp | 前ページ |
MoveSelectionForward
と MoveSelectionBackward
以外のメソッドは、パラメータ appendSelect
に true
を渡すと選択範囲の終了位置を移動します。false
を渡すとフォーカスセルを移動します。
画面に表示しない行または列は、移動する際に自動的にスキップします。