Avatar billede mcardle Nybegynder
28. september 2008 - 01:00 Der er 9 kommentarer og
1 løsning

Problemer med ListBox - SelectedIdex

Hej Eksperter.

Jeg har et lille problem. Jeg har en database, som jeg henter ting ud af og så har jeg oprettet en klasse til at håndtere de ting der bliver hentet ud og returnere navnet, så det er navnet der bliver vist i min ListBox. Når jeg så vælger et punkt på min ListBox skriver den alle de tilhørende værdier i nogle andre felter.

Det lyder meget kompliceret, men det er det ikke. Her er et eksempel.:
Oprettelse af ListBox:

While rdr.Read

ClothesArray.Add(New MyList(rdr(1), rdr(2), rdr(3), rdr(4), rdr(5), rdr(6)))

End While

Vælger item i ListBox:
Dim mList As MyList
mList = ClothesArray(lb_clothes.SelectedIndex)

lbl_brand.Text = Convert.ToString(mList.Brand)
lbl_size.Text = Convert.ToString(mList.Size)
lbl_length.Text = Convert.ToString(mList.Length)
lbl_type.Text = Convert.ToString(mList.Type)
rich_desc.Text = Convert.ToString(mList.Description)

Mit problem er så, at jeg har et filter på så der kan sorteres i min item, men når jeg gør det, så ændre indexeringen sig og den viser de forkerte ting til det item man har valgt.

Mit filter ser således ud.:
Private Sub Sort(ByVal Str As String)
        lb_clothes.Items.Clear()
        ListBoxClone.Items.Clear()

        For Each MyItem In ClothesArray

            If MyItem.ToString.StartsWith(Str) Then
                lb_clothes.Items.Add(MyItem.ToString)
            ElseIf Str = "" Then
                lb_clothes.Items.Add(MyItem.ToString)
            End If

            ListBoxClone.Items.Add(MyItem.ToString)

        Next

    End Sub

Håber I kan hjælpe...

'mcardle
Avatar billede qua Nybegynder
29. september 2008 - 15:40 #1
Det virker fint når du tilføjer elementerne i din ClothesArray til listboxen i samme rækkefølge som de ligger i arrayet, for derved er indexeringen det samme i både array'et og i listboxen. Problemet opstår når du blander indicerne fra ClothesArray og tilføjer dem i listboxen, som derved tror er indicerne stadig går 1, 2, ..., antalIndicer.

For at holde styr på hvilke elementer du har arbejder med, bliver du nød til at have en unique identifier eller key-value. Et unikt tal til hver stykke tøj ville løse problemet, da ville du, når brugeren trykke på et stykke tøj, kunne spørge din ClothesArray: "Må jeg bede om det stykke tøj med id: xxxx".
Avatar billede mcardle Nybegynder
29. september 2008 - 18:16 #2
Ja, det er jeg klar over. Mit problem er, at jeg ikke er så god til VB, så jeg ved ikke hvilke muligheder jeg har.

Kan du fortælle mig, hvad du synes jeg skal gøre?

'mcardle
Avatar billede qua Nybegynder
29. september 2008 - 18:56 #3
The .net framework contains several collections, the one that you're looking for is one that can contain a key and value, of types defined by you - you're looking for a collection with generic types.

The one that is properly best suited for your needs is the Dictionary collection found in [Collections.Generic.Dictionary]. When you create a variable of type Dictionary you get to define which type the key should be of, and likewise which type the value should be of.

An example of it's use:

Dim ExDict As New Dictionary(Of Integer, String)
ExDict.Add(2, "StringValueStoredInIntegerWithKeyValueOfTwo")
Debug.Print(ExDict(2).ToString) 'Would assert: StringValueStoredInIntegerWithKeyValueOfTwo
Avatar billede qua Nybegynder
29. september 2008 - 18:56 #4
Glemmer at jeg sidder på et dansk forum. Hvis der er noget ovenfor, der ikke er klart, så bare sig til.
Avatar billede mcardle Nybegynder
29. september 2008 - 21:01 #5
Jeg har ikke lige mulighed for at teste det lige pt. mit projekt ligger på min stationær og den har jeg lige upgraderet. Havde dog ikke lige kalkuleret med at jeg skulle have ny PSU, for der er kommet nye powerplugs, så jeg henter først min PSU o morgen.

Jeg skal nok teste det så hurtigt jeg kan.

Foreløbig tak for hjælpen.

'mcardle

P.S. Læste vidst noget om emnet i går i min C# bog... Har ikke helt valgt sprog endnu.
Avatar billede qua Nybegynder
29. september 2008 - 21:50 #6
Hvis du står overfor valget mellem C# og VB, så ville jeg sige at du skal hoppe på den syntax du holder mest af. Hvis du vælger C#, så vil du have den fordel at du vil have nemmere ved at skifte til sprog derived fra C-stammen såsom c++, java ect, hvilket kan være en fordel. De bygger dog begge på .NET framework, og derved er de næsten helt ens.
Avatar billede mcardle Nybegynder
29. september 2008 - 23:04 #7
Jeg kan bedst lide C#, men VB er ikke lige så strict mht. data mellem former og den slags.

C# minder og mest om PHP og det er det jeg kan pt.

'mcardle
Avatar billede qua Nybegynder
30. september 2008 - 01:56 #8
VB skjuler generelt meget information for slutbrugeren, da det oprindeligt var et sprog udviklet til at være et hurtigt udviklingssprog. I forhold til C++ er det stadig sådan er det ville tage 10x så lang tid at bygge det samme som i VB, men tradeoff er at du mister meget af kontrollen med hvad der sker.

Hvis du kommer fra et PHP-miljø, ville jeg nok vælge at holde mig til C#. Generelt vil du finde flere tutorials, artikler o.l. i C#, og du vil i mange kredse blive taget mere seriøst hvis du kommer daldrende i C# i stedet for VB.net.
Avatar billede mcardle Nybegynder
30. september 2008 - 21:44 #9
Ja, det ved jeg...

Nå, men hvor hyggeligt det end er, så er min computer vækket til live igen, dog med den mindre ting, at den har valg ikke at kunne bruge min IDE harddisk.

Anyways, hvis du smider et svar får du nogle point. Så må jeg bygge projektet igen og vende tilbage om det virkede. :o)

Tak for hjælpen.

'mcardle
Avatar billede mcardle Nybegynder
30. september 2008 - 21:45 #10
Du havde jo smidt svaret... Dooh..
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester