Morjes
Eli seuraavanlainen ongelma pitäs saada ratkaistua:Kun listboxissa on monta riviä,tarvis saada lisättyä uusi rivi rivien väliin siten,että kun listboxista valitsee hiiren painalluksella jonkun rivin(rivi maalautuu siniseksi) ja syöttökenttä ilmestyy näytölle,niin syötetty rivi tulisi valitun rivin edelle,eli millaisella koodinpätkällä rivin lisäämisen haluttuun paikkaan listboxissa voi toteuttaa.Pystyykö listboxissa muokkaamaan valittua riviä mitenkään,eli kun valitaan rivi,niin päästäisiin muuttamaan rivin sisältöä.Kiitoksia vastauksista etukäteen
Yksi tapa:
Luet aluksi listpoksin jokaisen rivin sisällön omaan soluun johonkin taulukkoon. Sitten selvität valitun paikan (list1.listindex + 1, jolloin saat sen seuraavan paikan), ja tämän jälkeen tyhjäät listpoksin. Sitten luet taulukon soluista dataa ja lisäilet niitä takaisin listpoksiin. Kun silmukka on lisättävän kohdalla lisäätkin sen taulukossa samassa kohtaa olevan sijasta, jonka jälkeen lisäät loput normaalisti.
Kokeile vaikka aluksin ensin tuota itse ja jos ei meinaa onnistua niin auttelen sitten ihan koodilla :)
edit: typoja...
edit2: ainiin juu, pitää ottaa talteen myös se lisättävä, joka kannattaa sijoittaa omaan muuttujaansa.
Kun lisäät uuden rivin AddItem-metodilla, voit ilmoittaa toisena parametrina, mihin kohtaan listaa rivi tulee. Ja kun panet lisäyskohdaksi listan ListIndexin, uusi rivi ilmestyy juuri valitun rivin eteen.
List1.AddItem "Uusi", List1.ListIndex
Valitun rivin muokkaaminen onnistuu vaikka TextBoxin avulla. Kirjoita ensin rivin valintaan:
Text1.Text = List1.Text
Sitten tarvitaan vielä tämmöinen koodi nappulaan, josta painamalla listan rivin sisältö muuttuu TextBoxiin kirjoitetuksi.
List1.List(List1.ListIndex) = Text1.Text
No höh, miksi mä en tiedä koskaan noita yksinkertaisia tapoja :(
Entä poisto? Jos pitää poistaa listboksista jotain, onko jotain helppo RemoveItem keinoa? Vai pitääkö kikkailla?
Nimesit juuri oikein metodin. :)
RemoveItem toimii. Annat vain parametriksi poistettavan kohdan numeron (nolla on ensimmäinen)
esim.
List1.RemoveItem 2
poistaa kolmannen.
ListBoxin puolella toimii sama RemoveItem kuin ComboBoxinkin puolella.
Asioita voi ensin kokeilla ennen kuin kysyy jollain foorumilla.
Mutta jos ei tiedä millä numerolla tieto on..
Tai jos haluan poistaa listasta suoraan sanalla. Esimerkiksi jos listassa on: mopo, auto, lentokone, saniainen ja teollisuuslaite. Itemit on lisätty listalle käyttäjän toimesta ja ne voivat olla mitä vain.
Jos käyttäjä haluaa poistaa listalta mopon, niin millä sen sieltä löytää? Kun se voi olla minä numerona tahansa. Tai jos käyttäjä lisää mopon uudelleen, miten estetään ettei e tule listaan kahdesti?
Olen kyllä testaillut tätä ennen kyselyä.
Ellei tuohon ole mitään valmista keinoa, niin sitten voit käydä for-loopilla läpi kaikki listan kohdat ja tarkistaa, missä niissä on mopo.
Esim.
For i = 0 To List1.ListCount 'käydään läpi kaikki If List1.List(i) = "mopo" Then 'jos löytyy mopo MsgBox (i) 'näytetään missä kohdassa List1.RemoveItem i 'ja poistetaan Exit For 'poistutaan luupista koska mopo löytyi jo End If Next i
Nocando kirjoitti:
Jos käyttäjä haluaa poistaa listalta mopon, niin millä sen sieltä löytää? Kun se voi olla minä numerona tahansa.
a) Joko käymällä listan läpi tuolla tavalla kuin hunajavohveli tuossa yllä kertoo. Tai...
b) Ottamalla käyttöön hiiren oikean näppäimen.
Private Sub List1_MouseUp(Button As Integer, _ Shift As Integer, _ X As Single, _ Y As Single) Dim i As Integer 'jos painettu hiiren korva on oikea, niin ... If Button = 2 Then '...käydään koko lista läpi... For i = 0 To Me.List1.ListCount - 1 '...tarkistaen onko listasta jotain valittu (Rivi korostettu). If Me.List1.Selected(i) Then 'Jos jotain on valittu, niin tarkistetaan vielä halutaanko valittu rivi tosiaan poistaa If MsgBox("Poistetaanko " & Me.List1.List(i) & "?", vbQuestion + vbYesNo, "Poisto") = vbYes Then 'poistetaan valittu Me.List1.RemoveItem i MsgBox "Poistettu", vbInformation + vbOKOnly, "Poisto" 'poistutaan silmukasta Exit For End If End If Next i End If End Sub
Nocando kirjoitti:
Tai jos käyttäjä lisää mopon uudelleen, miten estetään ettei e tule listaan kahdesti?
Sama tarkistus For-silmukalla kuin ComboBoxin kohdalla useampaankin kertaa esiteltiin.
Nocando kirjoitti:
Olen kyllä testaillut tätä ennen kyselyä.
Oletin (ilmeisen virheellisesti) ettet ollut lukenut toisessa viestiketjussa ollutta kysymystäsi ja sen saamaa vastausta. Pyydän anteeksi, jos loukkasin.
Semmoinen kysymys Antille vielä,että oliko tuo antamasi koodiesimerkki visual basic kutoselle?Minkälainen olis sama koodiesimerkki Visual basic.netillä toteutettuna?
Joo, se oli kuutoselle. Tässä vastaavat koodirivit VB.NETille:
ListBox1.Items.Insert(ListBox1.SelectedIndex, "Uusi")
TextBox1.Text = ListBox1.SelectedItem
ListBox1.Items.Item(ListBox1.SelectedIndex) = TextBox1.Text
Laitan nyt tämän kysymyksen tännekkin, vaikka sitä jo tuossa toisessa aiheessa kysyinkin(löytyis paremmin vastaus)
1.Onko mahdollista koodissa liikuttaa listboksin vierityspalkkia?
2.Jos vastaus kysymykseen 1 on kielteinen, niin miten kannattaisi menetellä, kun tapaus on semmoinen, että ohjelma näyttää käyttäjälle msgbox:illa ilmoituksia aika monta, ja jos käyttäjä ei niistä pidä, niin vois tulostaa ne johonkin listalle, kuten yritin listboksiin tehdä. Ongelma vain on se, että se palkki jää koko ajan ylös, ja kun listaan lisää taas uuden kommentin niin sitä pitää taas skrollata alaspäin.
katoppas tuota => https://www.ohjelmointiputka.net/keskustelu/6255-listbox-vierimään-automaattisesti-alas-vb6
Vastasin jo kyseisen asian omaan topiciin, mutta laitetaan se nyt tännekkin.
1&2) Ei suoranaisesti vierityspalkkia säätämällä. Sama "efekti" saadaan aikaan TopIndex:llä, jolla valitaan ylin List-item, joka on näkyvissä. Tällöin mitään ei ole valmiiksi valittuna, kuten tuon Selected:n kanssa.
Edit: Se mikään oma topicci ollut... Tässä se toinen vastaus koodiesimerkillä.
Aihe on jo aika vanha, joten et voi enää vastata siihen.