none
Selecionar linha DataGridView com o botão direito Mouse RRS feed

  • Pergunta

  • Olá Pessoal,
    Tenho um DataGridView associado a um ContextMenuStrip, gostaria de ao clicar com o botão direito do mouse já selecionar a linha onde está posicionado o cursor (a linha onde foi pressionado o botão direito do mouse).

    Pois agora, quando clico com o botão direito dentro do DataGridView o menu é exibido, porem tem um opção que preciso pegar um código que está em uma coluna da grid para chamar um outro formulário (e só consigo pegar o código se a linha estiver selecionada).

    Como posso fazer isso ?

    Aguardo e obrigado,
    ECJ
    quarta-feira, 29 de julho de 2009 17:00

Respostas

  • Eli,

    Segue um exemplo:

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

    Espero que seja isso o que você está precisando.

    att,

    Fernanda


    “Caso esta resposta tenha ajudado a solucionar sua dúvida, favor clicar em “Marcar como Resposta” para beneficiar outros membros da comunidade que estejam lendo este thread”.
    quarta-feira, 5 de agosto de 2009 14:40
    Moderador

Todas as Respostas

  • Eli,

    Segue um exemplo:

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

    Espero que seja isso o que você está precisando.

    att,

    Fernanda


    “Caso esta resposta tenha ajudado a solucionar sua dúvida, favor clicar em “Marcar como Resposta” para beneficiar outros membros da comunidade que estejam lendo este thread”.
    quarta-feira, 5 de agosto de 2009 14:40
    Moderador
  • Perfeito Fernanda, era exatamente isso que eu queria fazer !!! Muito Obrigado,

    Abraços,

    Eli
    ECJ
    quarta-feira, 5 de agosto de 2009 14:53
  • Muito bom, me ajudou bastante.

    Parabéns Fernanda

    J. Wilson

    segunda-feira, 4 de abril de 2011 18:48
  • Fernanda, este algoritimo me ajudou em uma situação parecida.

    Muito Obrigado!

    quarta-feira, 25 de abril de 2012 20:53
  • Fernanda, boa noite!

    Usei seu exemplo do botão direito do mouse, porém no meu DataGridView não funcionou, pois ele seleciona a linha sim porém a setinha do canto esquerdo do mesmo não acompanha a seleção feita e com isto não surte o efeito que estou querendo, a mesma sempre fica na primeira linha do datagrid, e seu clicar com o botão esquerdo que é o padrão e após clicar o direito é que passa os dados corretos para outro form! Se por um acaso puder ajudar-me fico imensamente grato, obrigado! Estou utilizando o VS 2010 VB.NET!

    Att.


    Dilson J. Hasselmann Desenvolvedor VB.NET

    sábado, 24 de maio de 2014 04:51
  • Fernanda, boa noite!

    Usei seu exemplo do botão direito do mouse, porém no meu DataGridView não funcionou, pois ele seleciona a linha sim porém a setinha do canto esquerdo do mesmo não acompanha a seleção feita e com isto não surte o efeito que estou querendo, a mesma sempre fica na primeira linha do datagrid, e seu clicar com o botão esquerdo que é o padrão e após clicar o direito é que passa os dados corretos para outro form! Se por um acaso puder ajudar-me fico imensamente grato, obrigado! Estou utilizando o VS 2010 VB.NET!

    Att.


    Dilson J. Hasselmann Desenvolvedor VB.NET

    Olá Fernanda!

    Encontrei a solução e estou postando para que se alguém estiver com a mesma dificuldade possa suplantá-la!

    Private Sub dgvEmTransito_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles dgvEmTransito.MouseDown
          Dim hti As DataGridView.HitTestInfo = dgvEmTransito.HitTest(e.X, e.Y)
    
          If (e.Button = MouseButtons.Right) Then
             If dgvEmTransito.RowCount <> 0 Then
                btnPausa_Continua.PerformClick()
                If hti.RowIndex > -1 Then
                   For i As Integer = 0 To dgvEmTransito.Rows.Count - 1
                      dgvEmTransito.Rows(i).Selected = False
                   Next
                   For Each linha As DataGridViewRow In dgvEmTransito.Rows
                      For Each Celula As DataGridViewCell In dgvEmTransito.Rows(linha.Index).Cells
                         If Celula.ColumnIndex >= 0 Then
                            dgvEmTransito.Rows(Celula.RowIndex).Selected = True
                            dgvEmTransito.CurrentCell = dgvEmTransito.Rows(Celula.RowIndex).Cells(0)
                         End If
                      Next
                   Next
                End If
                Call TraReceber(1)
                lFechamento = True
                dgvEmTransito.Rows.RemoveAt(dgvEmTransito.SelectedRows(0).Index)
             End If
          End If
    
          Exit Sub
    
       End Sub

    Espero ter ajudado, e obrigado Fernanda pela dica!

    Att.


    Dilson J. Hasselmann Desenvolvedor VB.NET

    • Sugerido como Resposta DJHasselmann sábado, 24 de maio de 2014 07:32
    sábado, 24 de maio de 2014 07:29