パッケージは unvell.ReoGrid.One、名前空間は unvell.ReoGrid.WinForms です。
描画は GDI+(既定)と Direct2D から選べます(下記「描画方式」)。
導入とサンプルは WinForms で始める を参照してください。 本ページはメンバーの一覧です。
ワークブック
| メンバー | 内容 |
|---|---|
Workbook | 保持しているワークブック |
ActiveWorksheet | 表示中のシート |
SetWorksheet(ws) | 表示するシートを切り替える |
LoadWorkbook(wb) | ワークブックごと差し替える |
NewWorkbook() | 新規(Sheet1 1 枚) |
LoadJson(json) | reogrid-json から読み込む |
WorkbookChanged / ActiveSheetChanged | イベント |
new ReoGridControl() は Sheet1 を 1 枚持った状態で始まります。
選択
| メンバー | 内容 |
|---|---|
Selection / ActiveCell | 選択範囲・アクティブセル |
MoveTo(row, col) | 移動 |
SelectionChanged | イベント |
選択範囲への一括操作は 選択とアクティブセル にまとめてあります。
編集
| メンバー | 内容 |
|---|---|
BeginEdit(initialText) / CancelEdit() / IsEditing | 編集の開始・取り消し |
GetActiveCellInput() / SetActiveCellInput(text) | 数式バー向けの入出力 |
ToggleEditingBold() ほか | 編集中の書式変更 |
履歴
Undo() / Redo() / CanUndo / CanRedo / HistoryChanged。
Ctrl+Z / Ctrl+Y は配線済みです。
表示
| メンバー | 内容 |
|---|---|
Zoom / ZoomChanged | 表示倍率(Ctrl+ホイールも有効) |
SetFreeze(rows, cols) | ウィンドウ枠の固定 |
ShowGridLines / ShowHeaders / ShowOutlines | 表示切り替え |
DpiScale | DeviceDpi / 96 |
その他のイベント
| イベント | 内容 |
|---|---|
ContextMenuRequested | 右クリック。ホスト側でメニューを構築する |
CellButtonClicked | ボタンセル型のクリック |
組込のコンテキストメニューはありません。ContextMenuRequested を受けて自前で構築します
(ReoGrid.Studio が参照実装です)。
描画方式(GDI+ / Direct2D)
| メンバー | 内容 |
|---|---|
Renderer | 描画方式。GridRenderer.Gdi(既定)または GridRenderer.Direct2D |
ActiveRenderer | 実際に描いている方式。Direct2D を使えない環境では Gdi |
using System.Drawing.Imaging;
using unvell.ReoGrid.WinForms;
grid.Renderer = GridRenderer.Direct2D;
// Direct2D を使えない環境(ネイティブ DLL が無い、Direct3D のデバイスが作れない)では GDI+ のまま
if (grid.ActiveRenderer != GridRenderer.Direct2D)
Console.WriteLine("GDI+ で描画しています");
Direct2D は GPU で描画し、文字を DirectWrite で組みます。表示するセルが多いほど差が出て、 スクロール時の全面再描画は GDI+ の約 3.5 倍です(1400×900 の画面で 1 フレーム 3.6 ms → 1.0 ms)。
- セル内エディタ、列幅・行高の自動調整、はみ出し表示も、グリッドと同じ方式で文字を測ります。 描画と計測が食い違うことはありません。
- 格子線と罫線は、100〜200% のどの倍率でも GDI+ と同じピクセルに描かれます。 文字は DirectWrite のアンチエイリアスになるため、GDI+ とは見た目がわずかに異なります。
- 実行中に切り替えられます。編集中のセルもそのまま続けられます。
- 印刷(
CreatePrintDocument)とRenderTo(graphics, …)は、どちらの方式でも GDI+ で描きます。
動作条件と配布
x64 または x86 のプロセスで動作します(ARM64 では GDI+ のままです)。GPU が使えない環境でも、 Direct3D のソフトウェア描画(WARP)で動きます。
描画にはパッケージ同梱のネイティブ DLL を使います。
| プロセス | ファイル |
|---|---|
| x64 | runtimes/win-x64/native/d2dlib64.dll |
| x86 | runtimes/win-x86/native/d2dlib32.dll |
NuGet で参照していれば、ビルドと発行の出力に自動でコピーされます(単一ファイル発行も可)。
ポータルの zip を使う場合は、runtimes フォルダーを unvell.ReoGrid.One.dll の隣にそのまま置いてください。
DLL が無いときは、Renderer を Direct2D にしても GDI+ で描画します。
高 DPI
PerMonitorV2 を有効にすることを推奨します。
Application.SetHighDpiMode(HighDpiMode.PerMonitorV2);
これにより Windows がビットマップ拡大する代わりに物理ピクセルのクライアント領域が渡され、 コントロールが自前でスケールした鮮明な描画になります。
任意の Graphics へ描く
| メンバー | 内容 |
|---|---|
RenderTo(graphics, width, height, scale) | 論理サイズを指定して描画 |
RenderFrame(graphics, physicalWidth, physicalHeight) | 物理ピクセル指定(ズーム込み) |
RenderToBitmap(width, height, scale) | 選択中の描画方式(ActiveRenderer)のまま、新しい Bitmap に描く |
サムネイル生成やヘッドレスでの画像出力に使えます。どれもウィンドウを必要としません。
// 論理サイズ 800×500 を 1.5 倍(1200×750 px)で。描画方式は ActiveRenderer に従う
using var bitmap = grid.RenderToBitmap(800, 500, scale: 1.5f);
bitmap.Save("sheet.png", ImageFormat.Png);
印刷
using var doc = control.CreatePrintDocument();
doc.Print();
PrintDocument を返すため、標準の印刷ダイアログやプレビューにそのまま渡せます。
詳細は 印刷とページ設定 を参照してください。