V4 V5

コントロールは Excel に準じたキー操作とマウス操作を最初から持っています。 配線のためのコードは要りません。

キー操作

移動と選択

キー動作
← ↑ → ↓アクティブセルを 1 つ動かす
Shift + 矢印選択範囲を広げる
Tab / Shift+Tab右へ / 左へ
Enter / Shift+Enter下へ / 上へ
Home行頭(A 列)へ
Ctrl + HomeA1 へ
PageDown / PageUp1 画面ぶん下 / 上
Shift + PageDown / PageUp1 画面ぶん選択を広げる

編集

キー動作
F2セルの編集を開始する
文字キーその文字で置き換えて編集を開始する
Delete / BackSpaceアクティブセルの内容を消す
Esc編集を取り消す
Enter編集を確定して下へ

書式・履歴・クリップボード

キー動作
Ctrl + B / I / U太字 / 斜体 / 下線(編集中は選択文字、非編集中は選択セル)
Ctrl + C / X / Vコピー / 切り取り / 貼り付け
Ctrl + Z元に戻す
Ctrl + Shift + Z / Ctrl + Yやり直す

Ctrl+B などは、編集中かどうかで対象が変わります。セル編集中なら選択した文字だけに、 そうでなければ選択セル全体に効きます(リッチテキスト)。

マウス操作

操作動作
クリックセルを選択
ドラッグ範囲を選択
ダブルクリックセルの編集を開始
行・列ヘッダーをクリック行・列全体を選択
左上のコーナーをクリックシート全体を選択
ヘッダーの境界をドラッグ行の高さ・列の幅を変える
ヘッダーの境界をダブルクリック内容に合わせて自動調整(AutoFit)
選択範囲右下のつまみをドラッグオートフィル
ホイール縦スクロール
Ctrl + ホイール表示倍率を 10% 刻みで変更
右クリックContextMenuRequested を発火
ヘッダーの をクリックオートフィルタのパネルを開く
アウトライン欄の + / グループの展開・折りたたみ

複数の行(または列)を選択した状態でその中の境界をドラッグすると、 選択したすべての行・列の大きさが同時に変わります。

サイズ変更とオートフィルは履歴に載るため、Ctrl+Z で戻せます (元に戻す・やり直す)。

日本語入力

非編集状態のセルで日本語入力を始めると、その場でエディタが開いて変換が続きます。 変換候補ウィンドウはアクティブセルの位置に出ます。

これは WinForms / WPF / Avalonia の 3 つとも同じ動作です。Avalonia は Linux / macOS でも 各 OS の入力メソッドで同様に動きます。

ホスト側で横取りする

キー割り当てを差し替える API はありません。変えたい場合はコントロールを派生させて キーイベントを先に処理します。

WinForms:

public class MyGrid : ReoGridControl
{
    protected override void OnKeyDown(KeyEventArgs e)
    {
        if (e.Control && e.KeyCode == Keys.S) { Save(); e.Handled = true; return; }
        base.OnKeyDown(e);   // 既定の処理へ
    }
}

WPF / Avalonia でも同じ形(OnKeyDown のオーバーライド)です。

e.Handled = true にして base を呼ばなければ、既定の動作は起こりません。 逆に、既定の動作のに処理を足したい場合は先に base を呼びます。

アプリ全体のショートカット(Ctrl+S など)は、グリッドではなくウィンドウ側で 受けるほうが素直です。グリッドは自分が使わないキーを握りつぶさないため、 ウィンドウのメニューアクセラレータはそのまま動きます。

編集を禁止する

読み取り専用の表示にしたい場合は、編集を始める 3 つの入口をふさぎます — F2 と Delete、文字キーの打ち込み、セルのダブルクリックです。

public class ReadOnlyGrid : ReoGridControl
{
    protected override void OnKeyDown(KeyEventArgs e)
    {
        if (e.KeyCode is Keys.F2 or Keys.Delete or Keys.Back) { e.Handled = true; return; }
        base.OnKeyDown(e);           // 移動・コピーはそのまま使える
    }

    // 文字キーによる編集開始を止める
    protected override void OnKeyPress(KeyPressEventArgs e) { e.Handled = true; }

    // ダブルクリックによる編集開始を止める(base を呼ばない)
    protected override void OnMouseDoubleClick(MouseEventArgs e) { }
}

貼り付け(Ctrl+V)も止めたい場合は Keys.V when e.Control を上の条件に加えます。

入力そのものを禁止したいだけなら、キー処理を潰すよりシート保護のほうが確実です。 ws.Protect() でシートを保護し、ws.SetRangeLock(range, LockState.Unlocked) で 編集させたい範囲だけを開けます。拒否は ws.EditRefused で通知されます。

次に読む

ページの内容は役に立ちましたか?