SPREAD for WPF 4.0J - GcSpreadGrid
カーソル位置の特定
MESCIUS SPREAD for WPF 4.0J > 開発者ガイド > ヒットテスト > カーソル位置の特定

ユーザーがマウスを操作したとき、コントロールのどの部分でその操作が行われたかを確認したいことがあります。このような場合、マウス操作に関するイベントを使用してカーソル位置を取得し、HitTest メソッドを実行すると確認できます。

HitTest メソッドの戻り値はカーソル位置の情報を保存したオブジェクトで、コントロールの領域によって型が異なります。戻り値の型は次のとおりです。

戻り値 説明
CellHitTestInfo セル。セルの所属する領域(行ヘッダ/列ヘッダ/コーナー ヘッダ/コンテンツ)、行および列インデックスを取得できます。
DragFillIndicatorHitTestInfo セルのドラッグ フィル操作のためのインジケータ
DragMoveIndicatorHitTestInfo セルのドラッグ移動のためのインジケータ
NoneHitTestInfo コントロールのどの部分にも該当しません。
ResizeEdgeHitTestInfo 行の高さ変更および列幅変更のためのインジケータ。行および列インデックスを取得できます。
ScrollBarHitTestInfo スクロールバー。水平方向/垂直方向のどちらか取得できます。

HitTest メソッドの使用したカーソル位置の特定について、次のサンプルコードを参照してください。

サンプルコード

次のサンプルコードはユーザーがマウスの左ボタンを押したとき、押した位置が列ヘッダのセルかどうかを調べます。

XAML
コードのコピー
<sg:GcSpreadGrid  Name="gcSpreadGrid1" PreviewMouseLeftButtonDown="gcSpreadGrid1_PreviewMouseLeftButtonDown"/>
C#
コードのコピー
private void gcSpreadGrid1_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e){
    HitTestInfo hinfo = gcSpreadGrid1.HitTest(e.GetPosition(gcSpreadGrid1));
    if (hinfo is CellHitTestInfo){
        CellHitTestInfo cellinfo = (CellHitTestInfo)hinfo;
        if(cellinfo.Area == SpreadArea.ColumnHeader)
            Debug.WriteLine(string.Format("列ヘッダ インデックス:{0}",cellinfo.ColumnIndex));
    }      
}
Visual Basic
コードのコピー
Private Sub gcSpreadGrid1_PreviewMouseLeftButtonDown(sender As Object, e As MouseButtonEventArgs)
    Dim hinfo As HitTestInfo = gcSpreadGrid1.HitTest(e.GetPosition(gcSpreadGrid1))
    If TypeOf hinfo Is CellHitTestInfo Then
        Dim cellinfo As CellHitTestInfo = DirectCast(hinfo, CellHitTestInfo)
        If cellinfo.Area = SpreadArea.ColumnHeader Then
            Debug.WriteLine(String.Format("列ヘッダ インデックス:{0}", cellinfo.ColumnIndex))
        End If
    End If
End Sub
関連トピック