GrapeCity.devlog

グレープシティ株式会社のDeveloper Tools〈開発支援ツール〉の最新情報をお届けします。製品のTIPSや発売情報、イベントのお知らせなどをいち早く発信中です。

セルの編集時に文字列を全選択するには?

こんにちは。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文書(初代プロダクトマネージャーが執筆)が公開されていますので、ご覧になってくださいね!

SPREAD for WPFの誕生秘話を見る

と、「再創造」したので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;
    }
}
Copyright © GrapeCity, Inc. All Rights Reserved.