Gå til innhold

Anbefalte innlegg

Holder fortsatt på med kalkulatoren min, men jeg ville gjerne få lov å bruke tastene på tastaturet til å sette inn tallene, (eller aktivere en funksjon)

 

Noen forslag til dette? :ermm:

F.eks Trykke på '1' skal aktivere knappen med '1' på kalkulatoren...

ThanX in advance! :thumbup:

Lenke til kommentar
Videoannonse
Annonse

har sliti med noe tilsvarende, og den måten jeg brukte var et såkalt "hack", dvs. jeg lagde en PictureBox som gikk i ett med selve formen, slik at den ser ut som den er usynlig, men Visible = True.

Deretter lagde jeg en Timer som satt fokus på den "usynlige picture boxen" et par ganger i sekundet, eks:

 

Private Sub Timer1_Timer()
   Picture1.SetFocus
End Sub

 

deretter kan du skrive en KeyDown-event På pictureboxen :

Private Sub Picture1_KeyDown(KeyCode As Integer, Shift As Integer)
   Select Case KeyCode
       Case vbKey1:
           Command1_Click
       Case vbKey2:
           Command2_Click
   End Select
End Sub

 

vet at dette er grisete, men har faktisk ingen bedre forslag desverre..

Lenke til kommentar

En lettere metode er å legge til en & i begynnelsen av Caption, men dette krever at brukeren må bruke ALT+1 hvis f.eks knappen 1 skal trykkes.

 

En derfor mer "sofistikert", men også mer kompleks metode ville være å sjekke tastestatusen til snarveisknappene med GetKeyState. Vi kan gjøre dette ved å gå igjenom alle tastene og bruke tag'en som en variabel for å lagre hvilken tast vi skal referere til. For å kjøre tastens prosedyre bruker vi SendMessage. Her er koden:

 

Private Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Private Const WM_LBUTTONDOWN = &H201
Private Const WM_LBUTTONUP = &H202

Dim ExitLoop As Boolean

Private Sub Form_Load()

' For å lage en snarvei til en av knappene ganske enkelt gjør
' noe lignende dette:
' Command1.Tag = vbKeyA

Show
KeyboardLoop

End Sub

Private Sub KeyboardLoop()

Dim clcObj As Control

Do Until ExitLoop

For Each clcObj In Controls
If IsNumeric(clcObj.Tag) Then
If GetKeyState(clcObj.Tag) < 0 Then
SendMessage clcObj.hwnd, WM_LBUTTONDOWN, 0&, ByVal 0&
SendMessage clcObj.hwnd, WM_LBUTTONUP, 0&, ByVal 0&
End If
End If
Next

Sleep 10
DoEvents
Loop

End Sub

Private Sub Form_Unload(Cancel As Integer)
ExitLoop = True
End Sub

 

Dette gjelder ikke bare for knapper, men også for alle andre objekter som har hwnd egenskap. Derfor, vær forsiktig og for all del: ikke legg til numretiske verdier i Labels, Shapes, Timere, Lines, Frames og Images i den samme formen.

Lenke til kommentar

Mange måter en kan løse ting på, har en annen metode her.

 

Først slår en på KeyPreview på formen, slik at alle tastetrykk blir registrert der uansett hvilket object i formen som er aktiv.

 

Deretter sjekke alle tastetrykk på formen om det er numerisk og deretter legge tallene der de skal.

 


Private Sub Form_Load()
   Me.KeyPreview = True
End Sub

Private Sub Form_KeyPress(KeyAscii As Integer)
   If IsNumeric(Chr(KeyAscii)) Then Text1.Text = Text1.Text & Chr(KeyAscii)
End Sub

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...