2016-05-09 10 views
0

VB.NETのDataGridViewでは、選択したセルを持つ列の代わりに、クリックされた列のインデックスを取得できます。VB.NET - Datagridview:クリックした列のインデックスを取得します。

コンテキストメニューを使用して、列を右クリックして非表示にするオプションをユーザに提供したいと考えています。このコードは、私の選択したセルを持つ列のインデックスを与える:

Private Sub dataGridView1_ColumnHeaderMouseClick(sender As Object, ByVal e As DataGridViewCellMouseEventArgs) Handles dataGridView1.ColumnHeaderMouseClick 
     If e.Button = Windows.Forms.MouseButtons.Right Then 
      currSelectedColIdx = e.ColumnIndex 
      ContextMenuStrip1.Show() 
     End If 
    End Sub 

編集:私はプロパティウィンドウを経由してのDataGridViewにコンテキストメニューをバインドするときに問題が起こる。私がそれをアンバインドする場合、コードは正しく動作します。

+0

あなたは、ヘッダーの列をクリックしてください? –

+0

はい。それでも私は選択したセルを持つ列のインデックスを返します – DylanW80

答えて

0

DataGridViewのCellContextMenuStripNeededイベントを使用できます。

Private Sub DataGridView1_CellContextMenuStripNeeded(sender As Object, e As DataGridViewCellContextMenuStripNeededEventArgs) Handles DataGridView1.CellContextMenuStripNeeded 
    If e.RowIndex = -1 Then 
     e.ContextMenuStrip = ContextMenuStrip1 
     'e.ColumnIndex is the column than you right clicked on it. 
    End If 
End Sub 

e.ColumnIndexでインデックスを取得できます。

+0

これは、セルが「アクティブ」または選択されている列のインデックスを取得します。私が望むものではありません。 – DylanW80

+0

私は変更コードを、あなたはヘッダー列をクリック! –

+0

はい。私はすでにColumnHeaderMouseClickを使用しています。まだ私が望むものではありません。私のコードを見てください。 – DylanW80

0

あなたはおそらくあなたの変数の宣言で "currSelectedColIdx" をproblemeています

このコードを試してください:

Private Sub DataGridView1_ColumnHeaderMouseClick(sender As Object, e As DataGridViewCellMouseEventArgs) Handles DataGridView1.ColumnHeaderMouseClick 
    If e.Button = Windows.Forms.MouseButtons.Right Then 
     Dim currSelectedColIdx = e.ColumnIndex 
     ContextMenuStrip1.Show(Cursor.Position) 
    End If 
End Sub 
+0

コンテキストメニューはOKです。問題は、最初の列(index:0)でセルを選択し、2番目の列(index:1)をクリックすると、インデックス0が得られますが、インデックス1が必要です。 – DylanW80

+0

あなたの可変 "currSelectedColIdx"の宣言 –

+0

私の答えを編集しましたあなたの変数の宣言はおそらくあなたの問題 "currSelectedColIdx" –

関連する問題