Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB.NET: Näppäimistön luku VB.NETillä

upsi [07.10.2007 17:33:26]

#

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/23436-vb6-näppäimistökäsittelijä

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/24369-vb6-getasynckeystaten-käyttö

Antti Laaksonen [07.10.2007 20:53:18]

#

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.

upsi [08.10.2007 14:03:22]

#

Kiitos Antti! Onpas taas olioita kerakseen, mutta kyllähän tuosta ymmärtää, kun koodin näkee. Ja kun lueskelin muutoksista vielä lisää.

Vastaus

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

Tietoa sivustosta