DOBON.NET プログラミング道: .NET Framework, VB.NET, C#, Visual Basic, Visual Studio, インストーラ, ...

DataGridの指定された座標位置の情報を取得する

注意:ここで紹介しているDataGridは、System.Windows.Forms名前空間のDataGrid(Windowsフォーム)です。System.Web.UI.WebControls名前空間のDataGrid(Webフォーム)ではありません。

DataGridクラスのHitTestメソッドにより、指定された座標位置の情報(セル、ヘッダ、境界線、バックグランドなど)を取得することが出来ます。

次の例ではDataGrid1(DataGridオブジェクト)上でマウスボタンが押されたとき、その位置の情報を表示しています。「DataGrid.HitTest メソッド」にも同じような例がありますので、そちらもご覧ください。

VB.NET
コードを隠すコードを選択
'ここでは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
C#
コードを隠すコードを選択
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の情報を取得する方法を紹介します。

VB.NET
コードを隠すコードを選択
'マウスポインタのスクリーン座標をクライアント座標に変換
Dim p As Point = DataGrid1.PointToClient(Cursor.Position)
'座標位置の情報を取得
Dim hti As System.Windows.Forms.DataGrid.HitTestInfo
hti = DataGrid1.HitTest(p)
'結果を表示
Console.WriteLine(hti.ToString())
C#
コードを隠すコードを選択
//マウスポインタのスクリーン座標をクライアント座標に変換
Point p = DataGrid1.PointToClient(Cursor.Position);
//座標位置の情報を取得
System.Windows.Forms.DataGrid.HitTestInfo hti;
hti = DataGrid1.HitTest(p);
//結果を表示
Console.WriteLine(hti.ToString());

注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。

  • .NET Tipsをご利用いただく際は、注意事項をお守りください。