Stato
Discussione chiusa ad ulteriori risposte.

dariogogliandol

Utente Medio
Autore del topic
30 Maggio 2010
114
0
Miglior risposta
0
per cercare in una listview a tre colonne tramite un textbox e un command button ho usato un comando che fino a poco tempo fà funzionava ora forse avro spostato qualkosa involontariamente e non funziona più. i codici che ho usato sono i seguenti



'cerca
Private Sub cerca_Click()
Dim itmX As ListItem
With lstVal
Set itmX = .FindItem(TextBox.Text, lvwSubItem, , 1)
If Not itmX Is Nothing Then
itmX.EnsureVisible
.ListItems(itmX.Index).Selected = True
.SetFocus
End If
End With
Set itmX = Nothing
End Sub
 
Ricerca normale
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

Ricerca successivo
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

Declarations della form
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!



N.B. mi sono permesso di aggiungerti una chicca per far scegliere l'utente se effettuare una ricerca case sensitive o no (ovvero che fa differenza tra maiuscole e minuscole),si attiva attraverso la proprietà Value di un controllo checkbox che ho chiamato chkCase
 
Ultima modifica:
hei mikle mi da errore 424 nessun oggetto e mi evidenzia questa stringa

If InStr(1, .ListItems.Item(i).Text, TextBox, IIf(chkCase.Value = Checked, vbBinaryCompare, vbTextCompare)) <> 0 Then
 
ancora una volta hai ragione! e senti un altra cosa se io ho una lista con tre voci uguali e voglio cercare una voce di quelle 3 come faccio a fare in modo che riesco in una maniera o in un altra (magari cliccando più volte sul tast cerca) a fare scorrere tutte le voci con quella parola?
 
Ma ti ho fatto apposta la sub che si chiama Ricerca successivo,non l'hai vista? :/
Tipo il "Trova successivo" del notepad windows
 
e il codice ricerca successivo lo devo mettere in un altro bottone??? spiegati meglio :emoji_smiley:
--------------- AGGIUNTA AL POST ---------------
cavolo continua a darmi errore 424 nessun oggetto e mi evidenzia questa stringa

If InStr(1, .ListItems.Item(i).Text, TextBox, IIf(chkCase.Value = Checked, vbBinaryCompare, vbTextCompare)) <> 0 Then

non so più che fare non ho capito bene come impostarla...
 
Ultima modifica:
si ma per fare cerca successivo come devo fare??????

Ma mi prendi in giro?
TI HO DATO TUTTA LA SUB -.-


Quella con il titolo Ricerca normale è una procedura che si limita a trovare il primo risultato,la Ricerca successivo invece se viene richiamata una seconda volta seleziona il secondo risultato,se una terza seleziona il terzo risultato e così via.
Se non sai cosa sono le declarations della form,sono le dichiarazioni che fai e che estendi a tutta la form,basta che le metti sopra la prima sub che hai.
Ad esempio:

Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
In questo caso i è una variabile long che può essere richiamata da qualsiasi sub che fà parte di quella form
 
Ultima modifica:
allora se questo è cerca successivo

Private Sub cerca_Click()
With lstVal
For i = 1 To .ListItems.Count
If InStr(1, .ListItems.Item(i).Text, TextBox, IIf(chkCase.Value = Checked, vbBinaryCompare, vbTextCompare)) <> 0 Then
.ListItems.Item(i).Selected = True
.SetFocus
i = i + 1
Exit Sub
End If
Next
MsgBox "Not found", vbExclamation, "Not found"
i = 1
End With
End Sub

vuol dire chi dim i as long si deve mettere subito prima di quello che ho scritto sopra oppure si deve mettere all'inizio del proggetto (prima di tutte le sub)?
 
Quello che hai copiato ed incollato è il Cerca NORMALE ovvero che si ferma al primo risultato :/
Io ti ho fatto DUE procedure:
la prima è quella che hai copiato ed incollato,la seconda (ovvero quella che ti permette di evidenziare anche i risultati successivi) è quella che ti ho scritto nel primo post sotto la scritta evidenziata in grassetto Ricerca successivo,la differenza sta nella prima riga di codice:

Ricerca normale: for i=1 ...
Ricerca successivo: for i=i ...


Le dichiarazioni della form si trovano sopra LA PRIMA sub (e ti ho pure dato un codice nel post precedente).
 
Infatto ti ha detto che Dim i As Long va nelle dichiarazioni e quindi all'inizio del progetto..è come se mettessi Option as explicit.
 
allora nel button del tasto cerca ho messo il codice cerca successivo ho messo il chekbox ho messo dim i as long prima della prima sub del mio proggetto ho fatto tutto come hai detto tu ma mi da errore "35600 limiti esauriti per l'indice" evidenziandomi questa stringa


If InStr(1, .ListItems.Item(i).Text, TextBox, IIf(chkCase.Value = Checked, vbBinaryCompare, vbTextCompare)) <> 0 Then
 
1) sì
2) ti mancano tutte le basi della programmazione in generale e del vb6,perciò ti consiglio di leggerti qualche guida o non sarai mai in grado di creare niente.
 
Stato
Discussione chiusa ad ulteriori risposte.