注意:ここで紹介しているDataGridは、System.Windows.Forms名前空間のDataGrid(Windowsフォーム)です。System.Web.UI.WebControls名前空間のDataGrid(Webフォーム)ではありません。
DataGridクラスのHitTestメソッドにより、指定された座標位置の情報(セル、ヘッダ、境界線、バックグランドなど)を取得することが出来ます。
次の例ではDataGrid1(DataGridオブジェクト)上でマウスボタンが押されたとき、その位置の情報を表示しています。「DataGrid.HitTest メソッド」にも同じような例がありますので、そちらもご覧ください。
'ここではMouseDownでクリックされたとする Private Sub DataGrid1_MouseDown(ByVal sender As Object, _ ByVal e As System.Windows.Forms.MouseEventArgs) _ Handles DataGrid1.MouseDown Dim grid As DataGrid = CType(sender, DataGrid) '指定された(クリックされた)座標位置の情報を取得する Dim hti As System.Windows.Forms.DataGrid.HitTestInfo hti = grid.HitTest(e.X, e.Y) 'クリックされた場所の情報を取得 Select Case hti.Type Case System.Windows.Forms.DataGrid.HitTestType.None Console.WriteLine("バックグランドがクリックされました。") Case System.Windows.Forms.DataGrid.HitTestType.Cell Console.WriteLine("行{0}列{1}のセルがクリックされました。", _ hti.Row, hti.Column) Case System.Windows.Forms.DataGrid.HitTestType.ColumnHeader Console.WriteLine("列ヘッダ'{0}'がクリックされました。", _ hti.Column) Case System.Windows.Forms.DataGrid.HitTestType.RowHeader Console.WriteLine("行ヘッダ'{0}'がクリックされました。", _ hti.Row) Case System.Windows.Forms.DataGrid.HitTestType.ColumnResize Console.WriteLine("列'{0}'の境界線がクリックされました。", _ hti.Column) Case System.Windows.Forms.DataGrid.HitTestType.RowResize Console.WriteLine("行'{0}'の境界線がクリックされました。", _ hti.Row) Case System.Windows.Forms.DataGrid.HitTestType.Caption Console.WriteLine("キャプションがクリックされました。") Case System.Windows.Forms.DataGrid.HitTestType.ParentRows Console.WriteLine("親行セクションがクリックされました。") End Select End Sub
private void DataGrid1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e) { DataGrid grid = (DataGrid) sender; //指定された(クリックされた)座標位置の情報を取得する System.Windows.Forms.DataGrid.HitTestInfo hti; hti = grid.HitTest(e.X, e.Y); //クリックされた場所の情報を取得 switch (hti.Type) { case System.Windows.Forms.DataGrid.HitTestType.None: Console.WriteLine("バックグランドがクリックされました。"); break; case System.Windows.Forms.DataGrid.HitTestType.Cell: Console.WriteLine("行{0}列{1}のセルがクリックされました。", hti.Row, hti.Column); break; case System.Windows.Forms.DataGrid.HitTestType.ColumnHeader: Console.WriteLine("列ヘッダ'{0}'がクリックされました。", hti.Column); break; case System.Windows.Forms.DataGrid.HitTestType.RowHeader: Console.WriteLine("行ヘッダ'{0}'がクリックされました。", hti.Row); break; case System.Windows.Forms.DataGrid.HitTestType.ColumnResize: Console.WriteLine("列'{0}'の境界線がクリックされました。", hti.Column); break; case System.Windows.Forms.DataGrid.HitTestType.RowResize: Console.WriteLine("行'{0}'の境界線がクリックされました。", hti.Row); break; case System.Windows.Forms.DataGrid.HitTestType.Caption: Console.WriteLine("キャプションがクリックされました。"); break; case System.Windows.Forms.DataGrid.HitTestType.ParentRows: Console.WriteLine("親行セクションがクリックされました。"); break; } }
次にスクリーン座標を使った例として、現在のマウスポインタ位置からDataGridの情報を取得する方法を紹介します。
'マウスポインタのスクリーン座標をクライアント座標に変換 Dim p As Point = DataGrid1.PointToClient(Cursor.Position) '座標位置の情報を取得 Dim hti As System.Windows.Forms.DataGrid.HitTestInfo hti = DataGrid1.HitTest(p) '結果を表示 Console.WriteLine(hti.ToString())
//マウスポインタのスクリーン座標をクライアント座標に変換 Point p = DataGrid1.PointToClient(Cursor.Position); //座標位置の情報を取得 System.Windows.Forms.DataGrid.HitTestInfo hti; hti = DataGrid1.HitTest(p); //結果を表示 Console.WriteLine(hti.ToString());
注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。