Kurssin viimeisen tehtävän kanssahan on aina ongelmia. ;) Ensinnäkin, mulla on hakusessa mitä tehtävässä halutaan.
Mulla on menussa Avaa, Tallenna ja Sulje. Halutaankohan tässä sitä, että joku tekstitiedosto avataan koneelta tuohon textboxiin?
Mikä tuo CommonDialog on ja mistä sen saan? Ei noissa vasemman puolen napeista löytynyt ainakaan. :/
Jos joku taas osaisi auttaa vähän, niin pääsisi tehtävässä eteenpäin. :D
lainaus:
Harjoitus 8.1
Lisää lomakkeelle CommonDialog ja TextBox ja valikko
Kirjoita valikoon Click -tapahtumaan toiminto, jossa suoritetaan Tiedoston avaus ja sen jälkeen tiedoston käsittely
Open CMDLG.FileName For Input As #1 Do Until EOF(1) ’1 viittaa tiedostoon Line Input #1, RiviTekstiä KokoTeksti = KokoTeksti & RiviTekstiä & vbCrLf 'RivinVaihto LoopJatka ohjelmaa niin, että lukee sisällön esim TextBox kontrolliin (moniriviseen).
tanja kirjoitti:
Halutaankohan tässä sitä, että joku tekstitiedosto avataan koneelta tuohon textboxiin?
Eipä tuossa oikein muutakaan voi tehdä.
tanja kirjoitti:
Mikä tuo CommonDialog on ja mistä sen saan? Ei noissa vasemman puolen napeista löytynyt ainakaan. :/
Se on ActiveX-kontrolli, siis ocx-tiedostossa sijaitseva käyttövalmis ohjelmakomponentti. Sen saa käyttöön VB:n valikoista: Project > Components ja ruksimalla listasta "Microsoft Common Dialog Control"
Lisää commondialogista löytyy runsaasti haulla.
Moikka tanja!
Lisää se controlli sinne Toolboxiin klikkaamalla hiiren oikealla Toolboxin sisällä ja raksimalla listasta Microsoft Common Dialog Control, version x.
(Location C:\WINDOWS\SYSTEM32\COMDLG32.OCX)
Raahaa se sit sun formille, akativoi ja paina F1 näppäintä niin saat Helpistä tietoa controllin ominaisuuksista, metodeista yms.
Menussa sun pitäs sit säädellä ne ominaisuudet, jotka controllille kussakin tapahtumassa asetat.
Tiedostojen kanssa pelattaessa asetus on: CommonDialog1.Action = 1
Voit nimetä tapahtuman esim. Commondialog1.Title = "Tiedosto tallenna"
Commondialog1.ShowSave avaa tiedostonhallinta ikkunan ja kun valitset jonkun kansion ja klikkaat tiedoston kuvaketta/kirjoittelet tiedoston nimen niin controlli palauttaa tiedostonimen polkuineen. Voit sitten käyttää tätä tietoa myöhemmässä koodissasi joko avaamaan tai tallentamaan tiedostoja.
(Open Commondialog1.FileName For jne...)
Miten saan tuon tekstitiedoston pullautettua nyt tuonne textboxiin? Msgboxissa sain toimimaan, mutta en nyt tuossa.
Koodi näyttää tältä:
Dim Rivi As String Dim Koko As String ------------------------------------------- Private Sub Avaa_Click() CommonDialog1.Filter = "Tekstit (*.txt)|*.txt" CommonDialog1.ShowOpen Open CommonDialog1.FileName For Input As #1 Do Until EOF(1) Line Input #1, Rivi Koko = Koko & Rivi & vbCrLf Loop End Sub ------------------------------------------- Private Sub Text1_Change() txtText1.Text = Koko End Sub ------------------------------------------- Private Sub Sulje_Click() Unload Me End Sub
Onko txtText1:n Multiline-ominaisuus True?
Ei ollut, nyt on, mutta siltikään ei toimi.
Text1_Change -tapahtumassa oleva koodi suoritetaan vasta kun kirjoitat jotain siihen tekstilaatikkoon. Siirrä siis tuo txtText1.Text = Koko tuon samaisen Avaa-menun taakse, missä se tiedoston lukeminenkin on.
Siirsin sen sinne, mutta kun ei pelitä.
Nyt siis tuo Avaa-menun koodi näyttää tältä, koitin laittaa myös Loopin sisäänkin, mutta ei pelittänyt... Nyt se suorittaessa antaa virheilmoituksen...
Private Sub Avaa_Click() CommonDialog1.Filter = "Tekstit (*.txt)|*.txt" CommonDialog1.ShowOpen Open CommonDialog1.FileName For Input As #1 Do Until EOF(1) Line Input #1, Rivi Koko = Koko & Rivi & vbCrLf Loop txtText1.Text = Koko End Sub
Sopiiko kysyä, millaisen virheilmoituksen?
Antaa virheilmoituksen kun on klikannut avattavaa tiedostoa:
Run-time error '424':
Object required
Napit: End, Debug, Help
Olen painanut Debugia ja heittää koodissa tuon txtText1.Text = Koko rivin keltaiseksi...
Onko formilla varmasti txtText1-nimistä tekstilaatikkoa? Tuo virhe viittaa, ettei olisi.
On juu ja sain sen toimimaankin. Oli... eh... tullut kirotusvihe.. ;)
KIITOS KAIKILLE!
Aihe on jo aika vanha, joten et voi enää vastata siihen.