DATAGRIDVIEW COLUMN HEADER

PERCIFILHO 20/09/2012 16:30:41
#410092
Boa tarde, galera.

Estou utilizando um DataGridView e quando o usuário clicar com botão direito em um registro dela, aparece um ContextMenuStrip com algumas opções que ele irá executar.
Pois bem, funciona perfeitamente, porém, se eu clicar com o botão direito no cabeçalho do DataGridView, o menu também aparece.
Existe uma maneira de impedir isso, ou existe uma propriedade do DataGridView que impeça isso?

Até mais.
KERPLUNK 20/09/2012 16:36:18
#410094
Dependendo do evento em que esteja acionando o ContextMenu, existe a propriedade [Ô]Em que linha está[Ô], veja em que evento está acionando isso. Se estiver acionando em um evento que tenha a propriedade [Ô]Row[Ô] ou coisa do gênero, verifique se o valor é maior que 0, que equivale ao cabeçalho.
PERCIFILHO 20/09/2012 17:01:02
#410097
Kerplunk, eu [Ô]peguei[Ô] essas rotinas de algum lugar na net, e estou usando elas para fazer isso.
Você saberia me dizer se está correto e onde eu verifico o que você falou?

Private Sub DgvProdutos_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles DgvProdutos.MouseDown
Dim hti As DataGridView.HitTestInfo = DgvProdutos.HitTest(e.X, e.Y)
If hti.RowIndex > -1 Then
For i As Integer = 0 To DgvProdutos.Rows.Count - 1
DgvProdutos.Rows(i).Selected = False
Next
DgvProdutos.Rows(hti.RowIndex).Selected = True
End If
End Sub

Private Sub DgvProdutos_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles DgvProdutos.MouseUp
Dim hti As DataGridView.HitTestInfo = DgvProdutos.HitTest(e.X, e.Y)
If (e.Button = MouseButtons.Right) Then
hti = DgvProdutos.HitTest(e.X, e.Y)
[ô] If (hti.Type = DataGridViewHitTestType.Cell And hti.ColumnIndex = 0) Then
[ô] ContextMenuStrip1.Show(DgvProdutos, New Point(e.X, e.Y))
[ô] End If
ContextMenuStrip1.Show(DgvProdutos, New Point(e.X, e.Y))
End If
End Sub

Até mais.
GUIMORAES 20/09/2012 17:09:59
#410099
Não entendi por que algumas linhas estão como comentario

Private Sub DgvProdutos_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles DgvProdutos.MouseUp
Dim hti As DataGridView.HitTestInfo = DgvProdutos.HitTest(e.X, e.Y)
If (e.Button = MouseButtons.Right) Then
hti = DgvProdutos.HitTest(e.X, e.Y)
[ô] If (hti.Type = DataGridViewHitTestType.Cell And hti.ColumnIndex = 0) Then
[ô] ContextMenuStrip1.Show(DgvProdutos, New Point(e.X, e.Y))
[ô] End If
ContextMenuStrip1.Show(DgvProdutos, New Point(e.X, e.Y))
End If
End Sub

você poderia deixar assim

Dim hti As DataGridView.HitTestInfo = DgvProdutos.HitTest(e.X, e.Y)
If (e.Button = MouseButtons.Right) Then
hti = DgvProdutos.HitTest(e.X, e.Y)
If (hti.Type = DataGridViewHitTestType.Cell) Then
ContextMenuStrip1.Show(DgvProdutos, New Point(e.X, e.Y))
End If
End If

Abraços
PERCIFILHO 24/09/2012 07:24:11
#410312
Resolvido !!!!

Modifiquei a rotina:

Private Sub DgvProdutos_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles DgvProdutos.MouseUp
Dim hti As DataGridView.HitTestInfo = DgvProdutos.HitTest(e.X, e.Y)
If (e.Button = MouseButtons.Right) Then
hti = DgvProdutos.HitTest(e.X, e.Y)
If hti.RowIndex > -1 Then
For i As Integer = 0 To DgvProdutos.Rows.Count - 1
DgvProdutos.Rows(i).Selected = False
Next
DgvProdutos.Rows(hti.RowIndex).Selected = True
Else
Exit Sub
End If
ContextMenuStrip1.Show(DgvProdutos, New Point(e.X, e.Y))
End If
End Sub


E deixei a propriedade ContextMenuStrip do DataGridView como (none).
Funcionou perfeitamente.

Valeu pelas tentativas.

Até mais.
Tópico encerrado , respostas não são mais permitidas