Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB.NET: [VB .NET] Listboxin jokaiselle arvolle oma tekstikenttä

Tumettaja [30.05.2009 19:15:39]

#

Olen toteuttamassa ohjelmaani yksinkertaista käyttöliittymää, jossa formissa on listbox ja monirivinen tekstikenttä. Ohjelmassa on nappula josta listboxiin lisätään uusi arvo. Jokaiselle listboxin arvolle luodaan oma alkio taulukkoon, jonne tallennetaan tekstikentän sisältö. Näin listboxia selaamalla siis tekstikentän sisältö vaihtuu listboxin arvon mukaan. Olen toteuttanut systeemin näin:

Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
     tallennus(ListBox1.SelectedIndex) = TextBox1.Text
End Sub

Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged
     TextBox1.Text = tallennus(ListBox1.SelectedIndex)
End Sub

Siinä on kuitenkin yksi ongelma: ohjelmassa on myös poista-nappi, josta valitun listboxin arvon voi halutessa poistaa. Kun listboxista poistetaan yksi arvo, tallenus-taulukon indeksit menevät sekaisin koska välistä on voitu poistaa arvoja. Miten tälläinen systeemi voidaan saada toimivaksi?

vesimies [30.05.2009 23:54:41]

#

Tässä on yksi idea: Tee ensin pieni luokka ListanAlkio (tms.), jolla on omainaisuudet
- ListaTeksti (näkyy siis listboxin rivillä); ToString palauttaa tämän.
- Teksti (se joka halutaan textboxiin)

Kun lisäysnappulaa painetaan, luodaan aina uusi ListanAlkio-olio ja lisätään se listboksiin. Sitten ListBox1_SelectedValueChanged lukee valitun alkion Teksti-ominaisuuden ja laittaa sen tekstiruutuun.

Tämä oli näin hyvin tiivistetysti.

Tumettaja [31.05.2009 01:25:58]

#

Sainkin ratkaistua ongelman käyttämällä tavallisen taulukon sijasta collection luokkaa. Tuosta saakin kätevästi poistettua välistä alkioita niin että indeksit pysyy paikallaan. Kiitos kuitenkin vastauksesta.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta