選択範囲(Selection)

ReoGrid では選択範囲の制御、スタイルの設定、選択範囲が変更された場合のイベントなどの機能を提供しています。

168

選択範囲の取得と設定

ワークシートのプロパティ SelectionRange を利用すると選択範囲の設定と取得ができます。

C#:

// 選択範囲を取得
var range = worksheet.SelectionRange;

// 選択範囲を設定
worksheet.SelectionRange = new RangePosition("A1:D5");

VB.NET:

// 選択範囲を取得
Dim range = worksheet.SelectionRange

// 選択範囲を設定
worksheet.SelectionRange = new RangePosition("A1:D5")

選択範囲の表示形式

ワークシートの SelectionStyle に WorksheetSelectionStyle 列挙体の値を設定すると選択範囲の表示形式を変更できます。

worksheet.SelectionStyle = WorksheetSelectionStyle.FocusRect;

選択範囲の表示形式には以下の三つがあります。

287

SelectionStyleNone を設定すると画面に選択範囲を表示しません。

選択範囲のスタイルが変更された場合、ワークシートの 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;

結果:

427

選択範囲の操作モード

ワークシートのプロパティ SelectionMode に WorksheetSelectionMode 列挙体の値を設定すると選択範囲の操作モードを変えられます。

sheet.SelectionMode = WorksheetSelectionMode.Cell;

選択範囲の操作モードは以下の通りです。

列挙体の値 説明
None 選択範囲を禁止(画面上での選択と表示はなし)
Cell セルまたは結合したセルのみ選択できる(範囲の選択を禁止)
Range 範囲の自由選択(デフォルトの場合)
Row 常に1行の全てのセルを選択
Column 常に1列の全てのセルを選択

画面上で一つのセルしか選択できないように設定したい場合、SelectionMode を Cell に設定します。画面上での選択と表示を禁止したい場合、SelectionModeNone に設定します。

選択範囲の操作モードが変更した場合、ワークシートの 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 イベントが複数回発生します。

426

範囲を選択する流れは以下の通りです。

  1. 開始位置をクリックし、一つのセルを選択しました。選択範囲を変更したため SelectionChanged イベントが発生します。
  2. ワークシートでマウスをドラッグして選択範囲を変更している間、SelectionChanging イベントが発生します。
  3. マウスをリリースします。最終的に選択範囲が確定されたため、SelectionChanged イベントが発生します。

SelectionRangeChangedSelectionRangeChanging イベントは、前回イベントが発生した選択範囲と違う範囲の場合でのみ発生します。マウスがいくら移動しても前回と同じ範囲であれば発生しません。

選択範囲の制御

指定したセルを選択できないように制御したり、選択範囲の操作をキャンセルしたりするには、イベント BeforeSelectionRangeChange を利用します。このイベントは選択範囲が変更される前に発生します。

イベントのプロパティ StartRowStartColumnEndRow および 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セルしか含まず、常に選択範囲の中にあります。選択範囲が変更された場合、フォーカスも移動されます。フォーカスが変更された場合、そのフォーカスセルが選択範囲となります。

195

フォーカスセルの取得と設定

ワークシートの FocusPos プロパティにアクセスすると、フォーカスセルの取得と設定ができます。

C#:

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;

SelectionForwardDirectionRight の場合:

164

Enter と Shift+Enter を押した場合フォーカスは左右に移動します。

SelectionForwardDirectionDown の場合:

165

Enter と Shift+Enter を押した場合フォーカスは上下に移動します。

フォーカスセルが右または下に移動した場合、SelectionMovedForward イベントが発生します。フォーカスセルが左または上に移動した場合、SelectionMovedBackward イベントが発生します。

フォーカスセルの表示設定

ワークシートのプロパティ FocusPosStyle を設定するとフォーカスの表示スタイルを変更できます。FocusPosStyle に設定する値は FocusPosStyle 列挙体の値のいずれかです。

列挙体の値 説明
Default デフォルトのスタイル
None フォーカスを非表示

プログラムで選択範囲とフォーカスセルを移動

ワークシートで提供される以下のメソッドを利用すると、プログラムでフォーカスセルを移動できます。

メソッド名 移動方向
MoveSelectionForward 前進(移動方向がRightの場合右、Downの場合下)
MoveSelectionBackward 後退(移動方向がRightの場合左、Downの場合上)
MoveSelectionUp
MoveSelectionDown
MoveSelectionLeft
MoveSelectionRight
MoveSelectionHome rowOrColumnRowに渡すと行の先頭に、Column を渡すと列の先頭に
MoveSelectionEnd 同上
MoveSelectionPageDown 次ページ
MoveSelectionPageUp 前ページ

MoveSelectionForward と MoveSelectionBackward 以外のメソッドは、パラメータ appendSelecttrue を渡すと選択範囲の終了位置を移動します。false を渡すとフォーカスセルを移動します。

画面に表示しない行または列は、移動する際に自動的にスキップします。