こんにちは。SPREAD for WPFを担当している高橋です。今回はSPREADシリーズのちょっと前までの新顔だったSPREAD for WPFについて、ちょっとしたTipsを紹介したいと思います。
SPREAD for WPF 1.0Jがリリースされたのは2012年12月。SpreadJSが2016年1月に登場するまでは、SPREADシリーズの中で一番新しい製品でした。とは言っても、世に出て5年が経とうとしています。今ではすっかりSPREADシリーズの一員として定着しています。
WPFが登場したとき、これまでの.NETとは異なる概念に戸惑った方も多くいらっしゃると思います。XAML、バインディング、依存関係プロパティ、ルーティングイベント・・・。私もその一人です(笑)
そして、SPREAD for WPFの開発においても、WindowsフォームやASP.NETで構築した構造、概念をそのまま流用することも難しい状況でして・・・結果としてたどり着いたのが「SPREADの再創造」でした。そんなSPREAD for WPFの開発経緯や、コンセプトをまとめたPDF文書(初代プロダクトマネージャーが執筆)が公開されていますので、ご覧になってくださいね!
と、「再創造」したのでWindowsフォーム版のSPREADとは全然違うの?と思われるかもしれませんが、SPREADシリーズで人気の機能の多くは受け継がれています。ただ、Windowsフォームではプロパティ設定で行うものををWPFではStyleやTemplateを定義する・・という違いはあります。
よくお受けするご質問は「セルの編集を開始するとき、テキストが全選択された状態にしたい」というもの。WindowsフォームやASP.NET版のSPREADでは、コントロールのEditModeReplace プロパティをTrueに設定しますが、WPFではイベント実装で実現します。
具体的には、セルの編集が開始したときに発生するCellBeginEditイベントをハンドルし、イベントパラメーターを設定します。「面倒くさい!」と思われるかもしれません。でも「F2キーの押下」や「アクティブセルの変更」、「ダブルクリック」といった編集が開始したアクションごとに選択状態を設定するなんていう、細かいことの対応もできるのです。
次のサンプルコードは、F2キーが押されて編集状態になったときだけテキストを全選択します。参考にしてみてくださいね!
Visual Basic
Public Sub New() InitializeComponent() AddHandler GcSpreadGrid1.CellBeginEdit, AddressOf GcSpreadGrid1_CellBeginEdit End Sub Private Sub GcSpreadGrid1_CellBeginEdit(sender As Object, e As GrapeCity.Windows.SpreadGrid.SpreadCellBeginEditEventArgs) If e.BeginEditAction = GrapeCity.Windows.SpreadGrid.SpreadBeginEditAction.F2 Then e.EditCaretPosition = GrapeCity.Windows.SpreadGrid.EditCaretPosition.SelectAll End If End Sub
C#
public MainWindow() { InitializeComponent(); gcSpreadGrid1.CellBeginEdit += gcSpreadGrid1_CellBeginEdit; } void gcSpreadGrid1_CellBeginEdit(object sender, GrapeCity.Windows.SpreadGrid.SpreadCellBeginEditEventArgs e) { if (e.BeginEditAction == GrapeCity.Windows.SpreadGrid.SpreadBeginEditAction.F2) { e.EditCaretPosition = GrapeCity.Windows.SpreadGrid.EditCaretPosition.SelectAll; } }