You are here:Home-Vostri Lavori-Calcolatore – Come realizzare Calcolatrice-Rispondi a: Calcolatore – Come realizzare Calcolatrice
Rispondi a: Calcolatore – Come realizzare Calcolatrice2018-01-11T09:55:02+01:00

Home Forum Vostri Lavori Calcolatore – Come realizzare Calcolatrice Rispondi a: Calcolatore – Come realizzare Calcolatrice

BySalvBySalv
Amministratore del forum
    Post totali: 771

    Ciao Luigi, dunque ho visto che hai cambiato txt1 in Textbox1 e tx3 in TextBox2, poi dici che non ti fa la somma di non più di una cifra alla volta, e normale con il codice che hai usato perche fai le quattro operazioni ogni volta che inserisci una cifra, quindi anche se nel Textbox2 vengono scritte più cifre viene sempre contata 1 cifra sola.

    Ti ho dato un imbeccata nascosta

    la prima volta che si preme un segno di operazione Segno sarà uguale a “” quindi basta:

    Calcolo = Val(Text3)

    Come facciamo a stabilire quale sia la prima volta che viene premuto un operatore, a questo punto ci viene incontro una variabile Booleana(Vero-Falso), quindi oltre le 2 che ti ho detto che hai inserito nel posto giusto, anche se la variabile Segno dobbiamo dichiararla “String” in quanto non conterrà numeri.

    Dobbiamo inserirne un altra che chiameremo con un nome a piacere, la chiameremo “tt”, avremo una dichiarazioni delle variabili in questo modo

    Public operatore As String, numero As Long, Totale As Long, segno As String, tt As Boolean

    Anche se Operatore diciamo che dall’esempio di Sid, quella senza operatore, risulta inutile perche Segno fa la stessa cosa.

    quando inizializziamo la calcolatrice dobbiamo azzerare tutte le variabili, di norma all’apertura dell’UserForm viene fatto la prima volta ma se chiudiamo la Calcolatrice con “Hide” e la riapriamo non si azzerano, si dovrebbe chiudere con “UnLoad”, per cui meglio che all’apertura dell’UserForm ci sia una routine che faccia questo, ce ne sono 2 “Initialize” ed “Activate”, la prima imposta l’userform, la seconda quando viene aperta l’userform, useremo questa per impostare le variabili, avremo questa routine

    Private Sub UserForm_Activate()
    Textbox1.Text = ""
    TextBox2.Text = ""
    numero = 0
    Totale = 0
    tt = False
    Textbox1.SetFocus
    End Sub

    Che sarà uguale al Tasto Cancella perche dovrà fare la stessa cosa cioè azzerare tutto, come vedi anche la variabile Booleana “tt” e messa a False anche se di default è “False”, non sapendo lo stato in cui viene lasciata meglio dargli lo stato giusto di partenza.

    Ora tu nei CommandButton dei numeri hai fatto fare le quattro operazioni, tali pulsanti non devono fare calcolo, ma solo scrivere il numero nella TextBox1 e TextBox2, solo quello è il loro compito, quindi:

    Private Sub cmb1_Click()
    Textbox1.Text = Textbox1.Text + "1"
    TextBox2 = TextBox2 & 1
    End Sub

    Ho eliminato anche “numero” che non serve, inoltre anche se è giusto specificare “.Text” con Excel non è necessario riesce a capire che il TextBox contiene testo, ancora tu come concatenamento hai usato “+” meglio usare la e commerciale “&”.

    come vedi incrementa i due TextBox del valore del pulsante non fa nessun calcolo, questo per ogni pulsante numero.

    Passiamo adesso al pulsante delle operazioni, all’inserimento della prima cifra, diciamo che premiamo il pulsante “+”.

    Cosa deve succedere?.

    Tutti i programmi o codici o Macro vengono svolti 1 operazione alla volta, cioè 1 solo passo poi il secondo etc.., cosi si deve fare mente locale per poter procedere, cosa fa il passo successivo, non bisogna pensare tutto il processo, o meglio si ma partendo da un punto, quante sono le azioni per arrivare al punto successivo, spezzettarle in ogni singola operazione, saltando qualche operazione non si arriva alla fine, ma si viene bloccato da qualche errore.

    Private Sub cmb_piu_Click()
    Textbox1.Text = Textbox1.Text & " + "
    If tt = False Then
    Totale = Val(TextBox2)
    segno = "+"
    TextBox2 = ""
    tt = True
    Else
    Totale = Evaluate(Totale & segno & Val(TextBox2))
    segno = "+"
    TextBox2 = ""
    End If
    End Sub

    La prima cosa aggiungiamo il ” + ” al TextBox1, leggiamo sempre il codice 1 riga alla volta, poi controlliamo se la variabile Booleana sia Vera o Falsa, essendo il primo operatore che mettiamo sicuramente sarà Falsa, quindi nella variabile del totale metteremo il valore di Textbox2 opportunamente trasformato in valore altrimenti non potrà fare calcoli successivi, essendo il primo numero non ha bisogno di calcoli.
    Poi nella variabile Segno metto l’operazione che dovrà fare con il numero successivo nel caso “+”, Poi cancello il TextBox2, ed infine la variabile Booleana la metto a “Vero=True” perchè abbiamo inserito il primo numero.

    Dopo aver inserito un altro Numero e premuto di nuovo “+” ma potrebbe essere anche un altro operatore il funzionamento sarà lo stesso.

    Si aggiunge il segno di operatore al Textbox1, alla riga successiva trova il controllo della variabile Booleana che essendo “True” passa dopo Else, qui incomincia a fare il calcolo, cioè il valore precedente viene calcolato con l’operatore precedente con il valore attuale.

    Ma notiamo bene la riga:

    Totale = Evaluate(Totale & segno & Val(TextBox2))

    Ce una parola strana “Evaluate”, in VBA se facciamo una somma o qualsiasi altra operazione, tale operazione viene eseguita se ci sono gli operatori “+-*/^” etc.. ma noi abbiamo messo il segno dell’operatore nella variabile “Segno”, quindi il VBA non riesce ad interpretarlo come segno operazionale, qui la parola chiave “Evaluate” che ci risolve il problema facendo interpretare una stringa come elemento operazionale.

    A questo punto fa la somma di Totale + il Valore di Textbox2, quindi se prima Totale conteneva 12 e Textbox2 contiene 15 facendo l’operazione con il “+” Totale conterrà 25, chiaro il principio?.

    poi inserisce in “Segno” il Calcolo successivo cioè se avremmo premuto “Diviso” Segno Conterrebbe “/” come prossima operazione.

    Ed infine Cancella il TextBox2 in attesa di nuovi numeri.

    Alla fine premiamo = Uguale per far riportare il calcolo finale delle operazioni.

    Private Sub cmb_uguale_Click()
    Totale = Evaluate(Totale & segno & Val(TextBox2))
    TextBox2 = Totale
    Textbox1 = ""
    tt = False
    End Sub

    Che non fa altro che fare l’ultima operazione scriverla nel TextBox2, Cancellare il TextBox1 e mettere a False “tt” per una nuova sequenza di operazioni.

    Non so se sono riuscito a spiegarmi chiaramente.

    Ora con queste informazioni dovresti riuscire a terminare, vediamo se riesci.

    Ciao By Sal  :bye:

     

    Ciao By Sal (8-)
    se ti piace la soluzione aiuta a sostenere il Forum con una DONAZIONE a piacere, Grazie