none
Selecionar item no listview e mostrar no textbox RRS feed

  • Pergunta

  • Boa Noite! 

    Estou aprendendo a desenvolver um programa em VB.net usando o VisualStudio 2015 e estou com uma dificuldade em fazer essa instrução.

    Tenho um ListView onde é carregado os itens do banco de dados e preciso dar uma instrução que o usuário irá seleccionar (Checked) no máximo 3 itens no ListView.

    Cada item seleccionado deve ser mostrado em 3 textbox.

    Ex: selecionei um item, este irá para o 1º textbox; selecionei um segundo, este irá para o 2º textbox ; selecionei um terceiro item, este irá para o 3º textbox.

    Utilizei comandos da seguinte forma:

    =============================================================================================

    Private Sub mlv1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles mlv1.SelectedIndexChanged
            For I = 0 To mlv1.Items.Count
    
                If mlv1.Items(I).Checked = True Then
                    mlblOBJprg1.Text = mlv1.SelectedItems.Item(I).ToString
    
                End If
    
            Next
            mtxtOBJprg1.Text = mlblOBJprg1.Text
    
            mtxtOBJprg2.Text = mlblOBJprg1.Text
    
            mtxtOBJprg3.Text = mlblOBJprg1.Text
    
        End Sub

    E em outro coloquei da seguinte forma:

    Private Sub mlv1_ItemSelectionChanged(sender As Object, e As ListViewItemSelectionChangedEventArgs) Handles mlv1.ItemSelectionChanged
            If mlv1.SelectedItems.Count > 3 Then
                e.Item.Selected = False
                MsgBox("Selecione apenas 3 itens por etapa", MsgBoxStyle.Information, "AGE")
            End If
        End Sub
    Mas essas instruções não funcionam.

    Alguém pode me ajudar e ver onde estou errando.

    Agradeço a atenção.
    sábado, 10 de março de 2018 23:34

Respostas

  • Boa tarde amigo, para isso usa o evento checked. Verifique e veja se e isso mesmo, que gostaria de fazer.

    Codigo

    Public Class Form1
    
        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            Me.ListView1.Columns.Add("Columns0")
            Me.ListView1.Items.Add("teste1")
            Me.ListView1.Items.Add("teste2")
            Me.ListView1.Items.Add("teste3")
            Me.ListView1.CheckBoxes = True
        End Sub
    
        Private Sub ListView1_ItemChecked(sender As Object, e As ItemCheckedEventArgs) Handles ListView1.ItemChecked
            For Each x As ListViewItem In Me.ListView1.Items
                If x.Checked = True Then
                    If Me.TextBox1.Text = Nothing And x.Text <> Me.TextBox2.Text And x.Text <> Me.TextBox3.Text Then 'verificar se TextBox1 esta vasia, se estiver add texto  ... 
                        Me.TextBox1.Text = x.Text 'pegar o intem selecionado apenas o txt
                        Exit For
                    ElseIf Me.TextBox2.Text = Nothing And x.Text <> Me.TextBox1.Text And x.Text <> Me.TextBox3.Text Then 'verificar se TextBox2 esta vasia, se estiver add texto  ... 
                        Me.TextBox2.Text = x.Text 'pegar o intem selecionado apenas o txt
                        Exit For
                    ElseIf Me.TextBox3.Text = Nothing And x.Text <> Me.TextBox1.Text And x.Text <> Me.TextBox2.Text Then 'verificar se TextBox3 esta vasia, se estiver add texto  ... 
                        Me.TextBox3.Text = x.Text 'pegar o intem selecionado apenas o txt
                        Exit For
                    End If
                Else
                    If x.Text = Me.TextBox1.Text Then
                        Me.TextBox1.Clear()
                        Exit For
                    ElseIf x.Text = Me.TextBox2.Text Then
                        Me.TextBox2.Clear()
                        Exit For
                    ElseIf x.Text = Me.TextBox3.Text Then
                        Me.TextBox3.Clear()
                        Exit For
                    End If
                End If
            Next x
        End Sub
    End Class
    

    • Marcado como Resposta ivofb domingo, 11 de março de 2018 22:59
    domingo, 11 de março de 2018 19:00

Todas as Respostas

  • Boa noite amigo, veja se e isso mesmo que pretende, ou eu me enganei.  

    Codigo

    Public Class Form1
    
        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    
        End Sub
    
        Private Sub ListView1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ListView1.SelectedIndexChanged
    
            If Me.TextBox1.Text <> Nothing And Me.TextBox2.Text <> Nothing And Me.TextBox3.Text <> Nothing Then 'verificar se ja foi escrito nas 3 TextBox
                Me.TextBox1.Clear() 'caso as 3 TextBox foram ja escritas e a pessoa queira add outro valor limpar tudo
                Me.TextBox2.Clear()
                Me.TextBox3.Clear()
            End If
    
            If Me.TextBox1.Text = Nothing Then 'verificar se TextBox1 esta vasia, se estiver add texto  ... 
                Me.TextBox1.Text = Me.ListView1.SelectedItems(0).Text 'pegar o intem selecionado apenas o txt
            ElseIf Me.TextBox2.Text = Nothing Then 'verificar se TextBox2 esta vasia, se estiver add texto  ... 
                Me.TextBox2.Text = Me.ListView1.SelectedItems(0).Text 'pegar o intem selecionado apenas o txt
            ElseIf Me.TextBox3.Text = Nothing Then 'verificar se TextBox3 esta vasia, se estiver add texto  ... 
                Me.TextBox3.Text = Me.ListView1.SelectedItems(0).Text 'pegar o intem selecionado apenas o txt
            End If
        End Sub
    End Class
    

    domingo, 11 de março de 2018 03:06
  • Bom dia.

    Segue sugestão testada.

    Se te ajudar, marque como útil/resposta.

    Private Sub mlv1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles mlv1.SelectedIndexChanged
            Me.TextBox1.Clear()
            Me.TextBox2.Clear()
            Me.TextBox3.Clear()
    
            If mlv1.SelectedItems.Count > 0 Then
    
                If mlv1.SelectedItems.Count > 0 Then
                    Me.TextBox1.Text = Me.mlv1.SelectedItems(0).Text
    
                    If mlv1.SelectedItems.Count > 1 Then
                        Me.TextBox2.Text = Me.mlv1.SelectedItems(1).Text
    
                        If mlv1.SelectedItems.Count > 2 Then
                            Me.TextBox3.Text = Me.mlv1.SelectedItems(2).Text
    
                            If mlv1.SelectedItems.Count > 3 Then
                                MsgBox("Selecione apenas 3 itens por etapa", MsgBoxStyle.Information, "AGE")
                            End If
                        End If
                    End If
    
                End If
    
            End If
        End Sub


    MARIANO1776

    domingo, 11 de março de 2018 13:20
  • Boa noite amigo, veja se e isso mesmo que pretende, ou eu me enganei.  

    Codigo

    Public Class Form1
    
        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    
        End Sub
    
        Private Sub ListView1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ListView1.SelectedIndexChanged
    
            If Me.TextBox1.Text <> Nothing And Me.TextBox2.Text <> Nothing And Me.TextBox3.Text <> Nothing Then 'verificar se ja foi escrito nas 3 TextBox
                Me.TextBox1.Clear() 'caso as 3 TextBox foram ja escritas e a pessoa queira add outro valor limpar tudo
                Me.TextBox2.Clear()
                Me.TextBox3.Clear()
            End If
    
            If Me.TextBox1.Text = Nothing Then 'verificar se TextBox1 esta vasia, se estiver add texto  ... 
                Me.TextBox1.Text = Me.ListView1.SelectedItems(0).Text 'pegar o intem selecionado apenas o txt
            ElseIf Me.TextBox2.Text = Nothing Then 'verificar se TextBox2 esta vasia, se estiver add texto  ... 
                Me.TextBox2.Text = Me.ListView1.SelectedItems(0).Text 'pegar o intem selecionado apenas o txt
            ElseIf Me.TextBox3.Text = Nothing Then 'verificar se TextBox3 esta vasia, se estiver add texto  ... 
                Me.TextBox3.Text = Me.ListView1.SelectedItems(0).Text 'pegar o intem selecionado apenas o txt
            End If
        End Sub
    End Class

    Boa tarde João Paulo!

    Sua instrução está dando o seguinte erro no textbox2:

    Ocorreu uma exceção sem tratamento do tipo "System.ArgumentOutOfRangeException" em System.Windows.Forms.dll

    Informações adicionais: InvalidArgument=Value '0' não é um valor válido para 'index'.

    Vou tentar explicar melhor o que estou tentando fazer:

    Tenho essa tela abaixo onde o usuário irá selecionar através do checked(caixa de seleção) 3 dos itens listados ao qual não pode selecionar mais que isso (Mensagem: Só pode seleccionar 3 itens da lista).

    Os itens que são mostrados no ListView tem dois campos que vem do banco de dados = "Objetivo" e "Controle".

    O que eu preciso é que quando for ticado (checked) um item na lista, o texto do campo "Controle" será colocado no textbox1, ticado um segundo item seja colocado no textbox2e ticado um terceiro item será colocado no textbox3 e se o usuário ticar um 4º item seja mostrado a mensagem que não pode ser mais que 3 itens selecionados.

    Espero ter me feito mais claro e espero ajuda para essa questão.

    Mais uma vez agradeço a ajuda e atenção.

    domingo, 11 de março de 2018 18:03
  • Bom dia.

    Segue sugestão testada.

    Se te ajudar, marque como útil/resposta.

    Private Sub mlv1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles mlv1.SelectedIndexChanged
            Me.TextBox1.Clear()
            Me.TextBox2.Clear()
            Me.TextBox3.Clear()
    
            If mlv1.SelectedItems.Count > 0 Then
    
                If mlv1.SelectedItems.Count > 0 Then
                    Me.TextBox1.Text = Me.mlv1.SelectedItems(0).Text
    
                    If mlv1.SelectedItems.Count > 1 Then
                        Me.TextBox2.Text = Me.mlv1.SelectedItems(1).Text
    
                        If mlv1.SelectedItems.Count > 2 Then
                            Me.TextBox3.Text = Me.mlv1.SelectedItems(2).Text
    
                            If mlv1.SelectedItems.Count > 3 Then
                                MsgBox("Selecione apenas 3 itens por etapa", MsgBoxStyle.Information, "AGE")
                            End If
                        End If
                    End If
    
                End If
    
            End If
        End Sub


    MARIANO1776

    Boa tarde Mariano!

    Sua instrução funcionou mas só transfere caso o usuário segure o Ctrl e clique no item, mas está mostrando o item Objetivo e não o Controle.

    Como escrevi ao João Paulo, 

    Vou tentar explicar melhor o que estou tentando fazer:

    Tenho essa tela abaixo onde o usuário irá selecionar através do checked(caixa de seleção) 3 dos itens listados ao qual não pode selecionar mais que isso (Mensagem: Só pode seleccionar 3 itens da lista).

    Os itens que são mostrados no ListView tem dois campos que vem do banco de dados = "Objetivo" e "Controle".

    O que eu preciso é que quando for ticado (checked) um item na lista, o texto do campo "Controle" será colocado no textbox1, ticado um segundo item seja colocado no textbox2e ticado um terceiro item será colocado no textbox3 e se o usuário ticar um 4º item seja mostrado a mensagem que não pode ser mais que 3 itens selecionados.

    Espero ter me feito mais claro e espero ajuda para essa questão.

    Mais uma vez agradeço a ajuda e atenção.

    domingo, 11 de março de 2018 18:08
  • Boa tarde amigo, para isso usa o evento checked. Verifique e veja se e isso mesmo, que gostaria de fazer.

    Codigo

    Public Class Form1
    
        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            Me.ListView1.Columns.Add("Columns0")
            Me.ListView1.Items.Add("teste1")
            Me.ListView1.Items.Add("teste2")
            Me.ListView1.Items.Add("teste3")
            Me.ListView1.CheckBoxes = True
        End Sub
    
        Private Sub ListView1_ItemChecked(sender As Object, e As ItemCheckedEventArgs) Handles ListView1.ItemChecked
            For Each x As ListViewItem In Me.ListView1.Items
                If x.Checked = True Then
                    If Me.TextBox1.Text = Nothing And x.Text <> Me.TextBox2.Text And x.Text <> Me.TextBox3.Text Then 'verificar se TextBox1 esta vasia, se estiver add texto  ... 
                        Me.TextBox1.Text = x.Text 'pegar o intem selecionado apenas o txt
                        Exit For
                    ElseIf Me.TextBox2.Text = Nothing And x.Text <> Me.TextBox1.Text And x.Text <> Me.TextBox3.Text Then 'verificar se TextBox2 esta vasia, se estiver add texto  ... 
                        Me.TextBox2.Text = x.Text 'pegar o intem selecionado apenas o txt
                        Exit For
                    ElseIf Me.TextBox3.Text = Nothing And x.Text <> Me.TextBox1.Text And x.Text <> Me.TextBox2.Text Then 'verificar se TextBox3 esta vasia, se estiver add texto  ... 
                        Me.TextBox3.Text = x.Text 'pegar o intem selecionado apenas o txt
                        Exit For
                    End If
                Else
                    If x.Text = Me.TextBox1.Text Then
                        Me.TextBox1.Clear()
                        Exit For
                    ElseIf x.Text = Me.TextBox2.Text Then
                        Me.TextBox2.Clear()
                        Exit For
                    ElseIf x.Text = Me.TextBox3.Text Then
                        Me.TextBox3.Clear()
                        Exit For
                    End If
                End If
            Next x
        End Sub
    End Class
    

    • Marcado como Resposta ivofb domingo, 11 de março de 2018 22:59
    domingo, 11 de março de 2018 19:00
  • Boa tarde.

    Segue sugestão testada com checkbox.

    Se te ajudar, marque como útil/resposta.

    Private Sub mlv1_ItemChecked(sender As Object, e As ItemCheckedEventArgs) Handles mlv1.ItemChecked
            Me.TextBox1.Clear()
            Me.TextBox2.Clear()
            Me.TextBox3.Clear()
    
    
            If mlv1.CheckedItems.Count > 0 Then
                Me.TextBox1.Text = Me.mlv1.CheckedItems(0).Text
    
                If mlv1.CheckedItems.Count > 1 Then
                    Me.TextBox2.Text = Me.mlv1.CheckedItems(1).Text
    
                    If mlv1.CheckedItems.Count > 2 Then
                        Me.TextBox3.Text = Me.mlv1.CheckedItems(2).Text
    
                        If mlv1.CheckedItems.Count > 3 Then
                            MsgBox("Selecione apenas 3 itens por etapa", MsgBoxStyle.Information, "AGE")
                        End If
                    End If
                End If
            End If
    
        End Sub




    MARIANO1776



    • Editado Mariano1776 domingo, 11 de março de 2018 20:05
    domingo, 11 de março de 2018 20:02
  • Boa tarde amigo, para isso usa o evento checked. Verifique e veja se e isso mesmo, que gostaria de fazer.

    Codigo

    Public Class Form1
    
        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            Me.ListView1.Columns.Add("Columns0")
            Me.ListView1.Items.Add("teste1")
            Me.ListView1.Items.Add("teste2")
            Me.ListView1.Items.Add("teste3")
            Me.ListView1.CheckBoxes = True
        End Sub
    
        Private Sub ListView1_ItemChecked(sender As Object, e As ItemCheckedEventArgs) Handles ListView1.ItemChecked
            For Each x As ListViewItem In Me.ListView1.Items
                If x.Checked = True Then
                    If Me.TextBox1.Text = Nothing And x.Text <> Me.TextBox2.Text And x.Text <> Me.TextBox3.Text Then 'verificar se TextBox1 esta vasia, se estiver add texto  ... 
                        Me.TextBox1.Text = x.Text 'pegar o intem selecionado apenas o txt
                        Exit For
                    ElseIf Me.TextBox2.Text = Nothing And x.Text <> Me.TextBox1.Text And x.Text <> Me.TextBox3.Text Then 'verificar se TextBox2 esta vasia, se estiver add texto  ... 
                        Me.TextBox2.Text = x.Text 'pegar o intem selecionado apenas o txt
                        Exit For
                    ElseIf Me.TextBox3.Text = Nothing And x.Text <> Me.TextBox1.Text And x.Text <> Me.TextBox2.Text Then 'verificar se TextBox3 esta vasia, se estiver add texto  ... 
                        Me.TextBox3.Text = x.Text 'pegar o intem selecionado apenas o txt
                        Exit For
                    End If
                Else
                    If x.Text = Me.TextBox1.Text Then
                        Me.TextBox1.Clear()
                        Exit For
                    ElseIf x.Text = Me.TextBox2.Text Then
                        Me.TextBox2.Clear()
                        Exit For
                    ElseIf x.Text = Me.TextBox3.Text Then
                        Me.TextBox3.Clear()
                        Exit For
                    End If
                End If
            Next x
        End Sub
    End Class

    Muito obrigado João Paulo, sua instrução funcionou como eu pretendia, somente tive de alterar a ordem de entrada do campo Controle e Objetivo.

    Agradeço muito sua ajuda.

    domingo, 11 de março de 2018 22:59
  • Boa tarde.

    Segue sugestão testada com checkbox.

    Se te ajudar, marque como útil/resposta.

    Private Sub mlv1_ItemChecked(sender As Object, e As ItemCheckedEventArgs) Handles mlv1.ItemChecked
            Me.TextBox1.Clear()
            Me.TextBox2.Clear()
            Me.TextBox3.Clear()
    
    
            If mlv1.CheckedItems.Count > 0 Then
                Me.TextBox1.Text = Me.mlv1.CheckedItems(0).Text
    
                If mlv1.CheckedItems.Count > 1 Then
                    Me.TextBox2.Text = Me.mlv1.CheckedItems(1).Text
    
                    If mlv1.CheckedItems.Count > 2 Then
                        Me.TextBox3.Text = Me.mlv1.CheckedItems(2).Text
    
                        If mlv1.CheckedItems.Count > 3 Then
                            MsgBox("Selecione apenas 3 itens por etapa", MsgBoxStyle.Information, "AGE")
                        End If
                    End If
                End If
            End If
    
        End Sub




    MARIANO1776




    Obrigado pela ajuda Mariano.
    domingo, 11 de março de 2018 23:00
  • De nada amigo, boa sorte com seu projecto.
    segunda-feira, 12 de março de 2018 00:16