VB Express [ListBox]

poruka: 17
|
čitano: 3.474
|
moderatori: Lazarus Long, XXX-Man, vincimus
1
+/- sve poruke
ravni prikaz
starije poruke gore
16 godina
protjeran
offline
VB Express [ListBox] - RJEŠENO!

Pozdrav ekipa! :)

 

Trebam pomoć u vezi ListBox-a u Visual Basic Expressu (2008).

Htio bih napraviti tražilicu koja pretražuje jedan ListBox, a ne znam kako.

 

Znači prilikom mjenjanja teksta u TextBox1 bi se trebale raditi usporedbe sa svim redovima u ListBox1, te ako se pronađe sadržaj iz TextBox1 u

ListBox1 da samo to ostane na listi (ne znam kako da bolje objasnim).

 

Pogledajte sliku u prilogu.

 

 

Slika Slika
Poruka je uređivana zadnji put pon 1.2.2010 15:29 (ScorpioN60).
 
0 0 hvala 0
16 godina
protjeran
offline
VB Express [ListBox]

Bilo tko? Mršti se

 
0 0 hvala 0
17 godina
protjeran
offline
VB Express [ListBox]

Za tu svrhu se obično koristi ComboBox jer on automatski se pozicionira na traženi pojam.

Moj PC  
0 0 hvala 0
16 godina
protjeran
offline
RE: VB Express [ListBox]
Tracer kaže...

Za tu svrhu se obično koristi ComboBox jer on automatski se pozicionira na traženi pojam.

Ali treba mi ova lista

17 godina
protjeran
offline
RE: VB Express [ListBox]

Pa i dalje ćeš imati tu listu, samo što će se combobox automatski pozicionirati na traženi pojam u listi.

16 godina
protjeran
offline
VB Express [ListBox]

Ne kužim sad.. da ostavim listu i samo texbox promjenim sa comboboxom i to nekako povežem ili što?

 
0 0 hvala 0
17 godina
protjeran
offline
VB Express [ListBox]

Zamijeniš ListBox s ComboBox-om tj. sve iteme iz listboxa prebaciš u combobox. I tada kad klikneš na combobox i počneš pisati on će ti se automatski pozicionirati na traženi pojam. Pogledaj sliku.

Moj PC  
0 0 hvala 0
16 godina
protjeran
offline
VB Express [ListBox]

Al kao što sam reko treba mi ta lista.. znam zašto

EDIT: Mora se sve odmah vidjeti, kao na ListBox1 al da opet mogu pretraživat

Poruka je uređivana zadnji put ned 31.1.2010 20:30 (ScorpioN60).
 
0 0 hvala 0
17 godina
protjeran
offline
RE: VB Express [ListBox]

Ne razumijem zašto se ta lista baš mora sva odmah vidjeti. Kao da je toliki problem stisnuti tu strelicu. Uostalom, lista samo zauzima prostor na formi, a za ovo što ti želiš je i namjenjen ComboBox tj. da zauzima malo prostora, da sadrži cijelu listu podataka, te ujedno i editbox preko kojeg se lako pozicioniraš na neki podatak u listi. Znači, ima sve što ti treba.

 

A ako baš inzistiraš na listboxu onda ćeš si morati potražiti negdje na netu takvu verziju komponente koja u zaglavlju ima editbox, jer originalni listbox to nema. A programski rješavati takvu pretragu ne vjerujem da ima smisla.

16 godina
neaktivan
offline
RE: VB Express [ListBox]
ScorpioN60 kaže...

Pozdrav ekipa! :)

 

Trebam pomoć u vezi ListBox-a u Visual Basic Expressu (2008).

Htio bih napraviti tražilicu koja pretražuje jedan ListBox, a ne znam kako.

 

Znači prilikom mjenjanja teksta u TextBox1 bi se trebale raditi usporedbe sa svim redovima u ListBox1, te ako se pronađe sadržaj iz TextBox1 u

ListBox1 da samo to ostane na listi (ne znam kako da bolje objasnim).

 

Pogledajte sliku u prilogu.

 

 

 poigraj se malo sa intelisence...

 

nisam na compu sa VS...pa pričam malo napamet...ali koliko se sjećam...

listbox bi trebao imati...itemcount...selectedindex...selectedvalue...contains("string_koji_tražiš")...etc...etc

 

savjet...google je tvoj prijatelj...pitaj ga sve što trebašNamigiva

do something while necrknes
16 godina
protjeran
offline
VB Express [ListBox]

Evo osmislio sam kako ce sve to funkcionirat, i napravio naravno

Ali problem je što kad uspoređujem string iz textboxa i svih ListBox1.Items, ako pronađe ono što treba, on vraća broj indexa na kojem se nalazi taj string

Znači, imam listu

 

ČlanListe1

ČlanListe2

ČlanListe3

ČlanListe4

ČlanListe5

 

i sad ja npr napišem u textbox "ČlanListe4", a u rezultatima pretrage mi vrati samo broj 3 (pozicija "ČlanListe4", jer počinje od 0)

 

 

 
0 0 hvala 0
17 godina
neaktivan
offline
RE: VB Express [ListBox]
ScorpioN60 kaže...

Evo osmislio sam kako ce sve to funkcionirat, i napravio naravno

Ali problem je što kad uspoređujem string iz textboxa i svih ListBox1.Items, ako pronađe ono što treba, on vraća broj indexa na kojem se nalazi taj string

Znači, imam listu

 

ČlanListe1

ČlanListe2

ČlanListe3

ČlanListe4

ČlanListe5

 

i sad ja npr napišem u textbox "ČlanListe4", a u rezultatima pretrage mi vrati samo broj 3 (pozicija "ČlanListe4", jer počinje od 0)

 

 

 

Ne znam hoće li pomoći..

 

Public Class frmMain

    'korišten je listbox naziva lstPodaci, textbox naziva txtUpit

    'deklariraj polje - može biti nešto drugo, ovdje je jednostavnosti uzeto polje stringova
    Private sLista() As String

    'napuni listbox testnim podacima
    Private Sub UcitajTestnePodatke()

        For I As Integer = 0 To 100
            ReDim Preserve sLista(I)
            sLista(I) = (I & " - Prezime Ime")
        Next
    End Sub

    'filtriraj listbox prema sadržaju teksta
    Private Sub FiltrirajListBox()

        'izađi ako je lista prazna
        If sLista.Count = 0 Then Exit Sub

        'isprazni listbox
        lstPodaci.Items.Clear()

        'filtiraj podatke pomoću petlje
        For I = 0 To sLista.Count - 1
            If sLista(I).Contains(txtUpit.Text) Then
                lstPodaci.Items.Add(sLista(I))
            End If
        Next

    End Sub

    Private Sub frmMain_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        'učitaj inicijalne testne podatke u polje
        UcitajTestnePodatke()

        'napuni listbox sa dummy podacima, da se dobije privid punog grida.
        For I = 0 To sLista.Count - 1
            lstPodaci.Items.Add(sLista(I))
        Next
    End Sub

    Private Sub txtUpit_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtUpit.TextChanged
        'kod promjene sadržaja teksta, filtiraj polje i prikaži one koji zadovoljavaju uvjet.
        'po meni bi bilo bolje da se to odvija na enter ili nešto sl... ovo mi je malo overkill na evente.
        FiltrirajListBox()
    End Sub
End Class

 

Ne znam jesi li na tako nešto mislio?

Ako nisi, zanemari moj post.

 

Lijep pozdrav.

UTERE SED NE ABUTERE!
17 godina
protjeran
offline
VB Express [ListBox]

Ako već želiš listu pokušaj sve prikazati u nekoj grid komponenti. One uglavnom imaju već ugrađene mehanizme pretraživanja, sortiranja i filtriranja podataka.

Moj PC  
0 0 hvala 0
16 godina
neaktivan
offline
RE: VB Express [ListBox]
ScorpioN60 kaže...

Evo osmislio sam kako ce sve to funkcionirat, i napravio naravno

Ali problem je što kad uspoređujem string iz textboxa i svih ListBox1.Items, ako pronađe ono što treba, on vraća broj indexa na kojem se nalazi taj string

Znači, imam listu

 

ČlanListe1

ČlanListe2

ČlanListe3

ČlanListe4

ČlanListe5

 

i sad ja npr napišem u textbox "ČlanListe4", a u rezultatima pretrage mi vrati samo broj 3 (pozicija "ČlanListe4", jer počinje od 0)

 

 

 i u čemu je problem? Smijeh

 

za brisanje ostalih imaš...removeitem...koji ti traži index...i makneš sve osim dobivenog index-a

jedino ćeš morati...svaki puta ponovo puniti listbox...za novu pretragu Namigiva

do something while necrknes
Poruka je uređivana zadnji put pon 1.2.2010 7:24 (baaab).
16 godina
protjeran
offline
RE: VB Express [ListBox]

EDIT: Hvala promatej, savršeno radi!

 

Poruka je uređivana zadnji put pon 1.2.2010 15:29 (ScorpioN60).
16 godina
protjeran
offline
VB Express [ListBox]

Novi problem..

Sada pokušavam članove liste učitati iz datoteke (nemojte pitati zašto)

Uglavnom, ako nisu svih pet redova upisani izbacuje mi grešku (makar sam stavio provjere jel je string prazan)

 

Imports System.IO

Private Sub UcitajPodatke()
        ReDim Preserve sLista(0)
        ReDim Preserve sLista(1)
        ReDim Preserve sLista(2)
        ReDim Preserve sLista(3)
        ReDim Preserve sLista(4)

        Dim Reader As New StreamReader("workers.dat")

        If ((String.IsNullOrEmpty(Reader.ReadLine())) = False) Then sLista(0) = (Reader.ReadLine())
        If ((String.IsNullOrEmpty(Reader.ReadLine())) = False) Then sLista(1) = (Reader.ReadLine())
        If ((String.IsNullOrEmpty(Reader.ReadLine())) = False) Then sLista(2) = (Reader.ReadLine())
        If ((String.IsNullOrEmpty(Reader.ReadLine())) = False) Then sLista(3) = (Reader.ReadLine())
        If ((String.IsNullOrEmpty(Reader.ReadLine())) = False) Then sLista(4) = (Reader.ReadLine())

End Sub

 

Nikad ja ne budem shvatio taj Visual Basic Mršti se

 

EDIT: Rješeno! Smijeh

 

Stavio sam provjeru u filtriranju

If ((String.IsNullOrEmpty(sLista(I)) = False)) Then

        If (sLista(I).Contains(TextBox1.Text)) Then
                ListBox1.Items.Add(sLista(I))
        End If

End If

Poruka je uređivana zadnji put pon 1.2.2010 19:41 (ScorpioN60).
 
0 0 hvala 0
17 godina
neaktivan
offline
RE: VB Express [ListBox]
ScorpioN60 kaže...

Novi problem..

Sada pokušavam članove liste učitati iz datoteke (nemojte pitati zašto)

Uglavnom, ako nisu svih pet redova upisani izbacuje mi grešku (makar sam stavio provjere jel je string prazan)

 

Imports System.IO

Private Sub UcitajPodatke()
        ReDim Preserve sLista(0)
        ReDim Preserve sLista(1)
        ReDim Preserve sLista(2)
        ReDim Preserve sLista(3)
        ReDim Preserve sLista(4)

        Dim Reader As New StreamReader("workers.dat")

        If ((String.IsNullOrEmpty(Reader.ReadLine())) = False) Then sLista(0) = (Reader.ReadLine())
        If ((String.IsNullOrEmpty(Reader.ReadLine())) = False) Then sLista(1) = (Reader.ReadLine())
        If ((String.IsNullOrEmpty(Reader.ReadLine())) = False) Then sLista(2) = (Reader.ReadLine())
        If ((String.IsNullOrEmpty(Reader.ReadLine())) = False) Then sLista(3) = (Reader.ReadLine())
        If ((String.IsNullOrEmpty(Reader.ReadLine())) = False) Then sLista(4) = (Reader.ReadLine())

End Sub

 

Nikad ja ne budem shvatio taj Visual Basic Mršti se

 

EDIT: Rješeno! Smijeh

 

Stavio sam provjeru u filtriranju

If ((String.IsNullOrEmpty(sLista(I)) = False)) Then

        If (sLista(I).Contains(TextBox1.Text)) Then
                ListBox1.Items.Add(sLista(I))
        End If

End If

Samo jedna napomena...

Ne znam zašto koristiš Redim Preserve četiri puta za redom.

 

Redim ti služi za povećanje zadnje dimenzije polja (u ovom slučaju jednodimenzionalnog), a a Preserve kako ne bi obrisao sadržaj polja, nego povećao i zadržao...

Dakle ako si htio povećati polja na 5 članova dovoljno ti je napisati Redim Preserve polje(5).. Ja sam u onom primjeru stavio Redim sam primjera radi, kad ne znaš broj elemenata koje polje sadrži.

Ako imaš unaprijed poznate veličine polja, onda ti je bolje dimenzionirati polje odmah na početku npr. Dim polje(4) As String i sl.

 

A i drugi dio si lakše mogao petljom riješiti.. npr.

 

While Not Reader.EndOfStream

      'tvoj kod
End While

 

Ono što sam ti poslao je samo jedno brzo rješenje, moći ćeš to i bolje riješti,

Budeš s vremenom skužio, kad se ispraksaš..

 

Pogledaj evo nešto slično streamereader+lista http://dotnetperls.com/streamreader-vbnet

 

Have fun. Namigiva

UTERE SED NE ABUTERE!
1
Nova poruka
E-mail:
Lozinka:
 
vrh stranice