Opettelen ohjelmoimaan VB 2005 Express Editionilla. Auttaisitteko, mihin paikkoihin (yhteen ja samaan moduuliin, eri moduuleihin, lomakkeen johonkin tapahtumaan vai minne?) alla olevat koodit tulisi kirjoittaa, jotta toimisi käyttämälläni VB-versiolla?
Ja milloin koodit tulevat suoritetuiksi, eli teenkö mihinkään painonappia tms.? Jos joku osaa tehdä helpomman version ohjelmista, niin kiitos. Tai sitten neuvoa kädestä pitäen ja kirjoittaa koodien viereen tarkasti, mihin sen työnnän.
Ensin olisi tämä lyhyempi koodi. Ihmettelen vaan, miksi VB:ni Ohje-valikko esittelee keyupin ja -downin aivan sekavasti, ja melkein kuin niitä ei tuettaisi kunnolla/lainkaan. Katsokaapa vaikka itse sieltä. Alempana on vielä toinen täältä Putkasta löytämäni koodi.
https://www.ohjelmointiputka.net/koodivinkit/
Ja se toinen koodi, joka antoi seuraavan virheilmoituksen, kun kirjoitin funktiot kaikki yhteen ja samaan luomaani moduuliin, ja form_load-aliohjelman mielestäni normaalisti lomakkeen load-tapahtumaan.
Virheilmoitus:
A call to PInvoke function 'lento!lento.nappainohjaus::GetAsyncKeyState' has unbalanced the stack. This is likely because the managed PInvoke signature does not match the unmanaged target signature. Check that the calling convention and parameters of the PInvoke signature match the target unmanaged signature.
https://www.ohjelmointiputka.net/koodivinkit/
Suurin osa Ohjelmointiputkan VB-koodeista ei toimi suoraan VB.NETillä, vaan ne on tarkoitettu vanhalle VB:lle. Välillä tarvittavat muutokset eivät ole suuria, mutta niitä voi olla vaikea keksiä tuntematta sekä vanhaa VB:tä että VB.NETiä.
Tuo ensimmäinen koodivinkki toimii VB.NETillä seuraavasti:
Dim Nappaimet(255) As Boolean Private Sub NaytaNappaimet() Dim i As Integer Label1.Text = "" For i = 0 To 255 If Nappaimet(i) = True Then Label1.Text &= i & " " End If Next End Sub Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyDown Nappaimet(e.KeyCode) = True NaytaNappaimet() End Sub Private Sub Form1_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles MyBase.KeyUp Nappaimet(e.KeyCode) = False NaytaNappaimet() End Sub
Alkuperäisestä koodista poiketen formille pitää lisätä Label-kontrolli (Label1), johon painetut näppäimet ilmestyvät. Vanhan VB:n grafiikkakomennot (Cls, Print) eivät nimittäin toimi VB.NETissä. Lisäksi KeyDown- ja KeyUp-tapahtumat määritellään hieman toisella tavalla ja näppäinkoodi pitää noutaa e-oliosta.
Kiitos Antti! Onpas taas olioita kerakseen, mutta kyllähän tuosta ymmärtää, kun koodin näkee. Ja kun lueskelin muutoksista vielä lisää.
Aihe on jo aika vanha, joten et voi enää vastata siihen.