DATAGRIDVIEW COLUMN HEADER
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.
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.
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.
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.
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.
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
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
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.
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