Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB.NET: ListBoxin rivien lisäys ja muokkaus

Sivun loppuun

Raptor [28.12.2004 16:02:24]

#

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

tuomas [28.12.2004 17:08:03]

#

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.

Antti Laaksonen [28.12.2004 17:12:07]

#

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

tuomas [29.12.2004 12:15:53]

#

No höh, miksi mä en tiedä koskaan noita yksinkertaisia tapoja :(

Nocando [30.12.2004 13:16:00]

#

Entä poisto? Jos pitää poistaa listboksista jotain, onko jotain helppo RemoveItem keinoa? Vai pitääkö kikkailla?

hunajavohveli [30.12.2004 13:18:33]

#

Nimesit juuri oikein metodin. :)
RemoveItem toimii. Annat vain parametriksi poistettavan kohdan numeron (nolla on ensimmäinen)
esim.

List1.RemoveItem 2

poistaa kolmannen.

BadSource [30.12.2004 13:21:01]

#

ListBoxin puolella toimii sama RemoveItem kuin ComboBoxinkin puolella.

Asioita voi ensin kokeilla ennen kuin kysyy jollain foorumilla.

Nocando [30.12.2004 13:36:56]

#

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ä.

hunajavohveli [30.12.2004 13:43:22]

#

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

BadSource [30.12.2004 14:14:23]

#

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.

Raptor [04.01.2005 09:22:05]

#

Semmoinen kysymys Antille vielä,että oliko tuo antamasi koodiesimerkki visual basic kutoselle?Minkälainen olis sama koodiesimerkki Visual basic.netillä toteutettuna?

Antti Laaksonen [04.01.2005 11:28:19]

#

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

Lumi-ukkeli [04.01.2005 19:15:10]

#

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.

Pekka Kauppila [04.01.2005 20:02:22]

#

katoppas tuota => https://www.ohjelmointiputka.net/keskustelu/6255-listbox-vierimään-automaattisesti-alas-vb6

BadSource [05.01.2005 09:26:27]

#

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ä.


Sivun alkuun

Vastaus

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

Tietoa sivustosta