Usuário com melhor resposta
Selecionar item no listview e mostrar no textbox

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.
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
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
- Editado João Paulo [] domingo, 11 de março de 2018 03:09
-
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 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.
-
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.
-
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
-
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
-
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.
-
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. -