2011-07-20 12 views

答えて

17

使用してのDataGridViewのMouseDownイベントが右マウスがクリックされたかどうかをテストとするので、セル、行または列がクリックされたかどうかを決定するために関連HitTestInfoプロパティを使用する場合。この情報を使用して、必要なContextMenuStripを表示します。

これは、これを行うMouseDownイベントの例です。サンプルを試すには、フォーム上のDataGridViewと3つのContentMenuStripをドロップします。 ContentMenuStrips mnuCell、mnuRow、およびmnuColumnに名前を付けます。

Private Sub DataGridView1_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles DataGridView1.MouseDown 
    If e.Button = Windows.Forms.MouseButtons.Right Then 
     Dim ht As DataGridView.HitTestInfo 
     ht = Me.DataGridView1.HitTest(e.X, e.Y) 
     If ht.Type = DataGridViewHitTestType.Cell Then 
      DataGridView1.ContextMenuStrip = mnuCell 
      mnuCell.Items(0).Text = String.Format("This is the cell at {0}, {1}", ht.ColumnIndex, ht.RowIndex) 
     ElseIf ht.Type = DataGridViewHitTestType.RowHeader Then 
      DataGridView1.ContextMenuStrip = mnuRow 
      mnuRow.Items(0).Text = "This is row " + ht.RowIndex.ToString() 
     ElseIf ht.Type = DataGridViewHitTestType.ColumnHeader Then 
      DataGridView1.ContextMenuStrip = mnuColumn 
      mnuColumn.Items(0).Text = "This is col " + ht.ColumnIndex.ToString() 
     End If 
    End If 
End Sub 

ここに私が項目のいるContextMenuStripの適切へのDataGridViewのいるContextMenuStripプロパティを割り当てるよ右(セル、行または列)をクリックします。 ContextMenuStripsの動作をさらにカスタマイズする方法を示すために、各ContentMenuStripsのメニュー項目にテキストを設定します。

+0

ありがとうございます、私は3つのコンテキストメニューを持っています、行、列とセルのために1つ。私は行のコンテキストメニューをこの行に置きました。これは行です。これはまだ表示されている他の2つを無効にしますが、セルをクリックすると行コンテキストメニューが表示されます。 – Smith

+0

@Smith私が必要と思うもので私の例を更新しました。 –

1

DataGridViewのMouseDownイベントで、DataGridView.HitTestメソッドを使用して、何がクリックされたかを確認します。次に、クリックした内容に応じてコンテキストメニューを切り替えることができます。

関連する問題