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