次の方法で共有


方法 : Windows フォーム DataGrid コントロールのクリックに応答する

更新 : 2007 年 11 月

メモ :

DataGridView コントロールは、DataGrid コントロールに代わると共に追加の機能を提供します。ただし、DataGrid コントロールは、下位互換性を保つ目的および将来使用する目的で保持されます。詳細については、「Windows フォームの DataGridView コントロールと DataGrid コントロールの違いについて」を参照してください。

Windows フォーム DataGrid がデータベースに接続された後は、ユーザーがクリックしたセルを監視できます。

DataGrid のユーザーが別のセルを選択したことを検出するには

  • CurrentCellChanged イベント ハンドラに、適切な応答用コードを記述します。

    Private Sub myDataGrid_CurrentCellChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles myDataGrid.CurrentCellChanged
       MessageBox.Show("Col is " & myDataGrid.CurrentCell.ColumnNumber _
          & ", Row is " & myDataGrid.CurrentCell.RowNumber _
          & ", Value is " & myDataGrid.Item(myDataGrid.CurrentCell))
    End Sub
    
    private void myDataGrid_CurrentCellChanged(object sender, 
    System.EventArgs e)
    {
       MessageBox.Show ("Col is " + myDataGrid.CurrentCell.ColumnNumber
          + ", Row is " + myDataGrid.CurrentCell.RowNumber 
          + ", Value is " + myDataGrid[myDataGrid.CurrentCell] );
    }
    

    (Visual C#) フォームのコンストラクタに次のコードを挿入してイベント ハンドラを登録します。

    this.myDataGrid.CurrentCellChanged += new
       System.EventHandler(this.myDataGrid_CurrentCellChanged);
    

ユーザーが DataGrid のどの部分をクリックしたかを決定するには

  • MouseDown イベントや Click イベントなどの適切なイベント ハンドラで HitTest メソッドを呼び出します。

    HitTest メソッドは、クリックされた領域の行と列を含む DataGrid.HitTestInfo オブジェクトを返します。

    Private Sub myDataGrid_MouseDown(ByVal sender As Object, _
    ByVal e As MouseEventArgs) Handles myDataGrid.MouseDown
       Dim myGrid As DataGrid = CType(sender, DataGrid)
       Dim hti As System.Windows.Forms.DataGrid.HitTestInfo
       hti = myGrid.HitTest(e.X, e.Y)
       Dim message As String = "You clicked "
    
       Select Case hti.Type
          Case System.Windows.Forms.DataGrid.HitTestType.None
             message &= "the background."
          Case System.Windows.Forms.DataGrid.HitTestType.Cell
             message &= "cell at row " & hti.Row & ", col " & hti.Column
          Case System.Windows.Forms.DataGrid.HitTestType.ColumnHeader
             message &= "the column header for column " & hti.Column
          Case System.Windows.Forms.DataGrid.HitTestType.RowHeader
             message &= "the row header for row " & hti.Row
          Case System.Windows.Forms.DataGrid.HitTestType.ColumnResize
             message &= "the column resizer for column " & hti.Column
          Case System.Windows.Forms.DataGrid.HitTestType.RowResize
             message &= "the row resizer for row " & hti.Row
          Case System.Windows.Forms.DataGrid.HitTestType.Caption
             message &= "the caption"
          Case System.Windows.Forms.DataGrid.HitTestType.ParentRows
             message &= "the parent row"
       End Select
    
       Console.WriteLine(message)
    End Sub
    
    private void myDataGrid_MouseDown(object sender, 
    System.Windows.Forms.MouseEventArgs e)
    {
       DataGrid myGrid = (DataGrid) sender;
       System.Windows.Forms.DataGrid.HitTestInfo hti;
       hti = myGrid.HitTest(e.X, e.Y);
       string message = "You clicked ";
    
       switch (hti.Type) 
       {
          case System.Windows.Forms.DataGrid.HitTestType.None :
             message += "the background.";
             break;
          case System.Windows.Forms.DataGrid.HitTestType.Cell :
             message += "cell at row " + hti.Row + ", col " + hti.Column;
             break;
          case System.Windows.Forms.DataGrid.HitTestType.ColumnHeader :
             message += "the column header for column " + hti.Column;
             break;
          case System.Windows.Forms.DataGrid.HitTestType.RowHeader :
             message += "the row header for row " + hti.Row;
             break;
          case System.Windows.Forms.DataGrid.HitTestType.ColumnResize :
             message += "the column resizer for column " + hti.Column;
             break;
          case System.Windows.Forms.DataGrid.HitTestType.RowResize :
             message += "the row resizer for row " + hti.Row;
             break;
          case System.Windows.Forms.DataGrid.HitTestType.Caption :
             message += "the caption";
             break;
          case System.Windows.Forms.DataGrid.HitTestType.ParentRows :
             message += "the parent row";
             break;
          }
    
          Console.WriteLine(message);
    }
    

    (Visual C#) フォームのコンストラクタに次のコードを挿入してイベント ハンドラを登録します。

    this.myDataGrid.MouseDown += new
       System.Windows.Forms.MouseEventHandler
       (this.myDataGrid_MouseDown);
    

参照

処理手順

方法 : Windows フォーム DataGrid コントロールに表示されるデータを実行時に変更する

その他の技術情報

DataGrid コントロール (Windows フォーム)