Mielenkiinnosta kyselen olemassa olevaan ratkaisuun, että mitenkähän olisi järkevintä tehdä multiline textboxissa niin että vaikkapa viisi viimeisintä riviä näkyy tekstikentässä.
Mietin että onko jotakin funktiota, jolla viimeinen rivi voidaan jättää pois, ja sitten vain uusi tapahtuma lisätään text1.text=text1.text & tapahtuma.
Mietin myös taulukointia, niin että uusi tapahtuma tulee aina taulukon nollanteen soluun, ja kun tavarat on kirjoitettu siirretään nollannen solun sisältö soluun yksi, solun yksi teksti soluun kaksi, jne. Mutta tämäkään ei ole välttämättä kovin järkevä tai yksinkertainen ratkaisu.
Olisiko ehdotuksia tämän asian järkevämpään ratkaisuun?
VB:n omat tekstilootat ovat valitettavan rajoittuneita. Ainakin RichTextBoxit tukevat sellaisia hienoja asioita kuin Range, mutta tätä toimintoa ei ole VB:n omassa RTB:ssä toteutettuna. Näiden osalta vaihtoehdoiksi jää joko tutustua API-kutsuihin tai sitten yrittää kokeilla jonkun toisen tekemää RTB-härpäkettä, ja toivoa että se riittää omiin tarpeisiin.
Yleensä tämmöiset on kuitenkin taidettu toteuttaa omin piirtorutiinein. Siinä on toki lievästi omia haasteitaan. Kunnollista helppoa ratkaisua ei valitettavasti ole. SelTextillä voi kyllä lisätä tekstiä kursorin sijaintiin, mutta silläkin on omat rajoituksensa (esim. jos on skrollattu ylemmäs, niin valinnan muuttaminen tekstilootan loppuun siirtää myös näkymän loppuun).
Taulukon (array) sijaan voit käyttää esim. Collectionia siihen, että sijoitat uusimman tiedon ensimmäiseen elementtiin. Taulukossa taas vastaava ei ole kovin järkevää kun tieto kuitenkin tarvitsee vain käydä läpi käänteisessä järjestyksessä. Ja taulukkoa kasvattaessakin kannattaa luoda "ylimääräisiä" elementtejä, jottei taulukkoa tarvitse jatkuvalla syötöllä kasvattaa. Yksikin ReDim Preserve kun vaatii aikamoisesti tapahtumia taustalla, mikä puolestaan hidastaa ohjelman toimintaa. Eri asia sitten tarkoitatko taulukolla taulukkomuuttujaa vaiko esim. FlexGridiä.
Juu, tutustuin itse myös tuohon Rikkaaseen tekstiloovaan, mutta kuten itsekin totesit, ei se ole riittävä tähän sovellukseen. Se mikä tämän toteuttamisesta tekee todellakin vähän "työlästä" on juurikin tuo takaperin käsittely. Sitten kuitenkin tekstiloovan kirjoittaminen pitäisi hoitaa oikein päin, jotta uusin tapahtuma näkyy ylimäisenä.
Tässä alla on koodi, jolla itse olen tämän nyt toteuttanut. Koodi voi olla purkkaa, tai sitten ei. Ehkä tämänkin olisi voinut viisaammin tehdä, mutta tämä nyt ainakin toimii minulla aivan hyvin, enkä jaksanut tähän sen enempää aikaa käyttää.
Toisaalta tästä voisi rakentaa itse jonkun ocx:n mutta koska visual basic on jo vanha kieli, niin en tiedä onko se sitten sen arvoista.
Kiitos Merri kannanotosta ja ideoinnista.
Dim Last5Stamps(5) As String
For P = 4 To 0 Step -1 Last5Stamps(P + 1) = Last5Stamps(P) Next Last5Stamps(0) = Number & " " & Datestamp & " " & Timestamp Text1.Text = "" For P = 0 To 4 Text1.Text = Text1.Text & Last5Stamps(P) & vbCrLf Next
Mitenköhän, onnistuisiko ensin koko boxin tekstin siirtäminen merkkijonoon, ja sieltä parsii rivinvaihdolla taulukkoon. täältä sitten vain napsisi viisi viimeistä?
groovyb kirjoitti:
Mitenköhän, onnistuisiko ensin koko boxin tekstin siirtäminen merkkijonoon, ja sieltä parsii rivinvaihdolla taulukkoon. täältä sitten vain napsisi viisi viimeistä?
Näin minä tekisin.
Itse mietin tässä, että onko sille tarvetta oikeasti edes olla textbox eikä esim. listbox olisi toimivampi vaihtoehto?
Moninaisia syitä toki tulee mieleen, miksi textbox voi olla parempi, mutta niitä ei mielestäni ainakaan aloituspostauksessa ole mainittu.
Aihe on jo aika vanha, joten et voi enää vastata siihen.