Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Search problem [VB.NET]

[es] :: .NET :: .NET Desktop razvoj :: Search problem [VB.NET]

[ Pregleda: 3167 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Mare_Bogovadja
Marko Matic
Bogovadja

Član broj: 22223
Poruke: 70
*.dial.InfoSky.Net



Profil

icon Search problem [VB.NET]04.08.2004. u 21:36 - pre 239 meseci
[VB.NET]

Radim na jednom programcicu u kome na jednom mestu treba odabrati stavku iz listboxa. Posto tih stavki ima bas mnogo [oko 800-900] resio sam da napravim malu formu koja bi sluzila za pretragu a sastoji se od textboxa u kom bi se kucalo i listboxa gde bi se rezultati filtrirali prema textu iz textboxa. Znam da sam zakomplikovao ali to bi trebalo da izgleda kao pretraga u Winampu [kad pritisnes F3].

To sam pokusao da postignem ovim kodom dole, ali on ne da ne radi, nego pravi neku pretragu od koje da Bog sacuva.:-[

Ako ima neko da ga ne mrzi neka vidi ovo i nek mi kaze gde sam pogresio.

Code:

Private Sub TextBox1_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged

        'deklarisem promenljive

        Dim s As String = Me.TextBox1.Text
        Dim p As Object
        Dim i, j As Integer
        Dim b() As Integer = New Integer(j) {}

        'prolazim kroz elemente listboxa

        For Each p In Me.ListBox1.Items

            'proveravam da li u njima postoji ono sto je u textbox-u

            If InStr(CStr(p), s.ToLower) = 0 Then

                'upisujem njihove indexe u niz

                b(j) = i
                j = j + 1
                ReDim b(j)

            End If

            i = i + 1

        Next

        'ovde brisem neodgovarajuce clanove na osnovu njihovih indexa

        For Each i In b

            Me.ListBox1.Items.Remove(Me.ListBox1.Items.Item(i))

        Next

    End Sub

End Class


Svaka pomoc je dobrodosla, unapred hvala.
"None may challenge the Brotherhood!"
Edwin VanCleef <Defias Kingpin>
 
Odgovor na temu

akrosoft
Dusan Mihajlovic
Beograd

Član broj: 31201
Poruke: 129
*.nat-pool.bgd.sbb.co.yu

Sajt: www.RoditeljPortal.com


Profil

icon Re: Search problem [VB.NET]04.08.2004. u 22:32 - pre 239 meseci
A sta ces ako korisnik pogresi pri kucanju pa krene da brise a ti si vec izbrisao odredjene iteme iz listboxa? Pored toga, mislim da ti je bolje da koristis ArrayList umesto niza, da ga ne bi stalno redimenzionisao.

Anyway... mislim da te ovo zeza, ti prilikom brisanja odredjenog itema iz listboxa tumbas i sve indexe itema koji se nalaze iza njega u nizu. Probaj da umesto
For Each i In b
naprvis obicnu decrement for petlju od poslednjeg itema do prvog. Time izbegavas da se preostali indexi itema koji te interesuje menjaju. Da....brisanjem itema u prvoj for each petlji bi totalno zablesavio petlju, tako da moras da pravis neki niz gde ces smestiti indexe......



 
Odgovor na temu

bunker
Srđan Savković
Smederevo

Član broj: 4495
Poruke: 239
*.beocity.net



Profil

icon Re: Search problem [VB.NET]05.08.2004. u 00:41 - pre 239 meseci
imas f-ju kontrole ListBox FindString. FindString vracca index prvog pronadjenog indexa u listboxu. FindString kao opcioni parametar ima integer od kog indexa da zapocne pretragu

Code:
dim index as Integer = ListBox1.FindString("trazeniString", zaljeniIndex)


Code:

dim tmpList as ListBox  'temprary list box
dim txtTrazeniString as TextBox

Sub FillTmpList(optional idx as Integer = -1)
  'postavlajs pocetni index -1 da bi findString poceo pretragu od pocetka
  dim currIdx as Integer = ListBox1.FindString(txtTrazeniString.Text, idx)
  if (currIdx =  ListBox.NoMatches) then 'znaci nije ga nasao
    tmpList.Items.Clear 'ovde uklanjas sve iz temporary liste. mozda je sintaksa 
    'malo drugacija(Clear, RamoveAll, nisam siguran)
    return 'izlazis iz procedure
  else 
    tmpList.Items.Add(ListBox1.Items(currIdx))
    Me.FillTmpList(currIdx) 'malo rekurzije, mozda cces morati da currIdx     
      'inkrementiras
  end if
end sub

ovo sam nalupao na brzinu, nisam proverio, ali trebalo bi da radi. citaj malo MSDN. nije to toliko lose :)

P.S. ja bih ovu f-ju pozivao na event txtTrazeniString.TextChanged




Nije važno stići prvi. Važno je prvo da stigneš.
 
Odgovor na temu

akrosoft
Dusan Mihajlovic
Beograd

Član broj: 31201
Poruke: 129
*.nat-pool.bgd.sbb.co.yu

Sajt: www.RoditeljPortal.com


Profil

icon Re: Search problem [VB.NET]05.08.2004. u 13:06 - pre 239 meseci
Citat:
bunker
Me.FillTmpList(currIdx) 'malo rekurzije, mozda cces morati da currIdx
'inkrementiras


Ovo ce ti se vrteti beskonacno, jer FindString prolazi kroz ceo listbox pa krece ponovo od prvog itema, tako da ako zeljeni item postoji u listu uvek ce ga nalaziti.
 
Odgovor na temu

akrosoft
Dusan Mihajlovic
Beograd

Član broj: 31201
Poruke: 129
*.nat-pool.bgd.sbb.co.yu

Sajt: www.RoditeljPortal.com


Profil

icon Re: Search problem [VB.NET]05.08.2004. u 13:32 - pre 239 meseci
Probaj ovako:
Code:

Dim i As Integer
For i = ListBox1.Items.Count - 1 To 0 Step -1
   If Not CStr(ListBox1.Items(i)).ToLower.StartsWith(TextBox1.Text.ToLower) Then
      ListBox1.Items.RemoveAt(i)
   End If
Next


....mozda moze jos da se optimizuje, ne stojim najbolje sa sintaksom VB-a.....

 
Odgovor na temu

Acid
Nikola Milanovic
Cacak

Član broj: 9585
Poruke: 144
*.ptt.yu



Profil

icon Re: Search problem [VB.NET]05.08.2004. u 20:47 - pre 239 meseci
ja mislim da ti je najbolje da deklarises niz, jednom u njega ubacis sadrzaj liste, i onda sam pretrazujes niz. sigurno ima biljih resenja, ali tako resavas broblem brisanja stavki iz liste.
 
Odgovor na temu

Mare_Bogovadja
Marko Matic
Bogovadja

Član broj: 22223
Poruke: 70
*.dial.InfoSky.Net



Profil

icon Re: Search problem [VB.NET]06.08.2004. u 14:08 - pre 239 meseci
Hvala svima koji su pokusali da odgovore, pomogli su mi da dodjem do resenja.

Ovo ispod radi[bas kao u winampu ]

Code:

Private Sub TextBox1_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged

        Me.ListBox1.Items.Clear()
' ovo je deo iz deklaracije listboxa        
        Me.ListBox1.Items.AddRange(New Object() {"Clan1", "clan2"}) ' i tako dalje
        Me.ListBox1.Location = New System.Drawing.Point(80, 80)
        Me.ListBox1.Name = "ListBox1"
        Me.ListBox1.Sorted = True
        Me.ListBox1.Size = New System.Drawing.Size(376, 121)
        Me.ListBox1.TabIndex = 0

        Dim s As String = Me.TextBox1.Text
        Dim p As Object
        Dim i, j, k As Integer
        Dim b() As Integer = New Integer(j) {}

        For Each p In Me.ListBox1.Items

            If InStr(CStr(p), s.ToLower, CompareMethod.Text) = 0 Then

                b(j) = i
                j = j + 1
                ReDim Preserve b(j)

            End If

            i = i + 1

        Next

        If b.Length > 0 Then

            For k = b.Length - 2 To 0 Step -1

                Me.ListBox1.Items.Remove(Me.ListBox1.Items.Item(b(k)))

            Next

        End If

    End Sub

End Class


Pozdrav iz Bogovadje
"None may challenge the Brotherhood!"
Edwin VanCleef <Defias Kingpin>
 
Odgovor na temu

[es] :: .NET :: .NET Desktop razvoj :: Search problem [VB.NET]

[ Pregleda: 3167 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.