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?
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.
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.
Aihe on jo aika vanha, joten et voi enää vastata siihen.