Oppure

Loading
26/01/10 15:03
maurizio74
Ci sono tante cose che devo ancora imparare in visual basic ma grazie a te qualche lacuna me l'hai tolta... cmq per completare il cerchio c'e' l'ultimo errorino da risolvere nel senso: da tasti della calcolatrice funziona tutto perfetto mi da eerore nel form_key press quando digito un operatore mi da errore l'emento '0' della matrice di controlli non esiste.. e tra laltro non mi schiacca la virgola?????

Private Sub Form_KeyPress(KeyAscii As Integer)
Dim Index As Integer
If KeyAscii = 13 Then KeyAscii = 61
Select Case KeyAscii
Case Asc("0";) To Asc("9";)
Index = KeyAscii - Asc("0";)
number_Click (Index)
Case Asc("+";), Asc("-";), Asc("*";), Asc("/";), Asc("=";)
Index = -1
Do
Index = Index + 1
Loop Until operator(Index).Tag = Chr(KeyAscii)
operator_Click (Index)
Case Asc(".";), Asc(",";)
virgola_Click (Index)
Case 8
cancella1_Click
End Select
End Sub
aaa
26/01/10 15:50
Alfonso
Credo ti sia perso dopo Operator_Click (Index)

LastInput = "OPS"

E poi Virgola_Click(index) nell'originale era Decimal_Click senza l'indice.
Hai fatto un array del tasto virgola?
E se si:
virgola_Click (Index) questo index da dove lo ricavi?

Considera che all'inizio della sub c'è "Dim index as integer" che setta Index=0 per cui quando premi la virgola o il punto la Select arriva direttamente a "Case Asc(".";).." e index vale ancora 0.

E poi Case 8
che tasto sarebbe?

Ti do un consiglio: quando ti appresti a fare modifiche sostanziali salva solo il form in cui effettui le modifiche con dei numeri sequenziali Calc1.frm, calc2.frm così se non funziona più nulla puoi sempre ricaricare la form precedente (che funziona) e confrontarla con quella modificata per trovare un eventuale errore (LastInput = "OPS" è sparito)
aaa
26/01/10 15:58
maurizio74
scusami lavevo confusa con un altra versione cmq questo e il codice tuo non funziona lo stesso....
quando digito un operatore mi da errore l'emento '0' della matrice di controlli non esiste.. e tra laltro non mi schiacca la virgola?????


Dim Index As Integer
'>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
'>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
If KeyAscii = 13 Then KeyAscii = 61 ' trasforma Invio in =
'>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
'>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Select Case KeyAscii
Case Asc("0";) To Asc("9";)
Index = KeyAscii - Asc("0";)
Number_Click (Index)
Case Asc("+";), Asc("-";), Asc("*";), Asc("/";), Asc("=";)
Index = -1
Do
Index = Index + 1
Loop Until operator(Index).Tag = Chr(KeyAscii)
Operator_Click (Index)
LastInput = "OPS"
Case Asc(".";), Asc(",";)
Decimal_Click
End Select

End Sub
aaa
26/01/10 16:10
Alfonso
Ma hai messo i valori dei tag in operator(Index).Tag?
e gli indici degli operator sono sempre da 0 a 4?

operator(0).tag = "="
operator(1).tag = "+"
......
operator(4).tag = "/"
aaa
26/01/10 17:59
maurizio74
Il problema è che ho 0-1-2-3-4 negli operatori ed anche nei number percio quando ad es. clicco sull'uguale il tasto si trasforma in zero
aaa
26/01/10 18:41
Alfonso
Va bè, ma non ragioni proprio?

Private Sub TastoGiu(Index As Integer)
Number(Index).Picture = ImageGiu(Index).Picture
End Sub
Private Sub TastoGiuOperatore(Index As Integer)
operator(Index).Picture = ImageGiu(Index).Picture
End Sub

ImageGiu(Index).Picture vale per entrambi?
aaa
26/01/10 19:01
maurizio74
forse e da troppo che sono su sto programmino sono un po' fuso non riesco piu' a ragionare... comunque li avevo cambiati adesso si chiamano imagegiuop imagesuop per gli operatori solo che adesso funzionano: nel senso che non li cambia piu'con i number pero' se li digito da tastiera del computer non li schiaccia aiutooooo
aaa
26/01/10 20:16
Alfonso
Devi aggiornare le sub Form_KeyDown e Form_KeyUp
Devi aggiungere i case che rilevano i keyCode dei tasti operatore del tastierino numerico
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
  Select Case KeyCode
     ' 48-57 keycode dei numeri sulla TASTIERA, 96-105 keycode del tastierino numer
     Case 48 To 57
         TastoGiu KeyCode - 48 ' il risultato è da 0 a 9 che sono gli indici dei number
     Case 96 To 105
         TastoGiu KeyCode - 96
     Case xxx ' +
	TastoGiuOperatore  1
     case yyy ' -
	TastoGiuOperatore 3	
     case kkk '/
	TastoGiuOperatore 4	
     case zzz ' *
	TastoGiuOperatore 2	
  End Select
End Sub

Stessa cosa per Private Sub Form_KeyUp

Ma non sono in grado di dirti i codici degli operatori del tastierino numerico (xxx,yyy,kkk,zzz) perchè adesso opero con un portatile.

Li puoi scoprire da solo inserendo dei punti di interruzione.
Posizionati con il cursore sulla riga
Private Sub Form_KeyDown(KeyCode
premi F9
Fai partire il programma e premi il tasto + del tastierino numerico, il programma si ferma momentaneamente nella riga, posiziona il cursore sulla parola keycode, puoi leggere in codice del tasto +.
premi f5 per continuare con il programma.
premi il tasto - ecc.
aaa