[Resolvido] Vb.net

Ruben_Barbosa

Power Member
Bom dia Pessoal,

Como faço para comparar um valor de uma textbox com uma listview de 4 colunas.

Isto é so quero comparar o valor da da textbox com a 1 coluna da listview.

De forma a não poder repetir o mesmo valor.
 
Última edição:
Vai aqui um exemplo testado. Neste exemplo, procuro o texto da textbox em todos os items de todas as colunas até achar uma correspondência. Só tens que modificar para procurar apenas na coluna que tu queres.

Código:
For Each I As ListViewItem In ListView1.Items

            If LCase(TextBox1.Text.Trim) = LCase(I.Text) Then
                MsgBox("Coluna 0 - Index " & I.Index)
                exit for
            ElseIf LCase(TextBox1.Text.Trim) = LCase(I.SubItems(1).Text) Then
                MsgBox("Coluna 1 - Index " & I.Index)
                exit for
            ElseIf LCase(TextBox1.Text.Trim) = LCase(I.SubItems(2).Text) Then
                MsgBox("Coluna 2 - Index " & I.Index)
                exit for
            ElseIf LCase(TextBox1.Text.Trim) = LCase(I.SubItems(3).Text) Then
                MsgBox("Coluna 3 - Index " & I.Index)
                exit for
            End If

 Next
 
eu fiz como disseste mas 1 declarei o I

Fiz Dim I as string

e Dps

For Each I As ListViewItem In ListView1.Items

If LCase(TextBox2.Text.Trim) = LCase(I.Text) Then
MsgBox("Não Pode Inserir o mesmo Valor " & I.Index)
listview1.selectitem(0).remove
exit for
end if
next

MAs não da lol n consigo declarar a variavel I :S omfg
 
Dessa forma estás a declarar o objecto 2 vezes, o que não é necessário visto que ao fazeres "for each I as listviewitem" o proprio ciclo está a declarar o item por ti. Ao fazeres um remove dentro de um ciclo for each por items, o ciclo arrebenta. Para fazeres um remove (o que para o que tu queres não é necessário) tens que ir por indexs.

Outra coisa é usares a variavel declarada como "Dim i as string" e depois no ciclo estares a utilizar essa mesma variavel. Ele não deixa porque existe uma duplicação de variaveis e nao consegue declarar a variavel I necessaria dentro do ciclo. Se fossem do mesmo tipo ainda dava agora assim...
 
Última edição:
Isso não foi testado. Remove dentro de um ciclo For Each não é permitido.

Eis uma solução fácil:

Código:
        Dim TextoAInserir As String = "Couve"

        Dim Achei As Boolean = False
        For Each LVI As ListViewItem In ListView1.Items
            If LVI.Text = TextoAInserir Then
                Achei = True
                Exit For
            End If

        Next

        If Achei = False Then
            Dim LVI As New ListViewItem
            LVI.Text = TextoAInserir
            LVI.SubItems.Add("blabla")
            LVI.SubItems.Add("blabla2")
            LVI.SubItems.Add("blabla3")
            ListView1.Items.Add(LVI)
        Else
            MsgBox("Isso já existe pah!")
        End If

E "Dim I as String" ? Já de si é mau, porque a variável é "declarada" dentro do ciclo For Each, mas... não seria As ListViewItem, se fosse o caso ?
 
Última edição:
Back
Topo