Come creare una calcolatrice con Visual Basic
Microsoft Visual Basic è un linguaggio di programmazione basato sul linguaggio BASIC, originariamente sviluppato per rendere la programmazione più facile da imparare. Visual Basic prende i comandi familiari di BASIC e aggiunge strumenti e interfacce orientati agli oggetti per progettare applicazioni Windows WYSIWYG e controlli web, tra molti altri miglioramenti. Un progetto di apprendimento relativamente semplice per Visual Basic è la creazione di una calcolatrice Windows.
Passaggio 1: Nuovo progetto
Apri Visual Basic 6 e seleziona "Standard EXE" dal menu nuovo progetto. Vedrai una form vuota apparire sullo schermo.
Passaggio 2: Rinominare progetto e form
Rinomina il tuo progetto e la tua form facendo clic su "Project1" sul lato destro dello schermo, nell'elenco progetti, e inserendo un nuovo nome nella riga "Name" della finestra Proprietà, che dovrebbe apparire sotto l'elenco progetti per impostazione predefinita. Premi "Invio" per accettare il nuovo nome. Fai lo stesso per la tua form (un nome suggerito è "CalculatorUI"), assicurandoti di inserire un nome simile nella proprietà "Caption", che cambierà il testo nella barra in alto della form. Salva il progetto in una nuova cartella sul tuo computer.
Passaggio 3: Aggiungere casella di testo
Aggiungi una casella di testo alla form. Questa sarà dove appariranno i numeri inseriti nella calcolatrice, così come i risultati dei calcoli. Fallo selezionando il pulsante TextBox dalla barra degli strumenti a sinistra dello schermo, e poi trascinando con il mouse la dimensione e la posizione desiderate per la TextBox. Una volta posizionata la TextBox puoi cambiare dimensioni e posizione trascinandola in un'altra posizione della form o trascinando le maniglie (i piccoli quadrati) lungo il bordo della TextBox. Assicurati di modificare le seguenti righe nella finestra Proprietà, con la TextBox selezionata: "(Name)" = tbResult, "Alignment" = 1 - Allinea a destra, "Data Format" = (clicca sul pulsante "..." per selezionare) Number, "Locked" = True, e "Text" = 0.
Passaggio 4: Aggiungere i pulsanti
Seleziona l'icona CommandButton sulla barra degli strumenti e crea il primo pulsante nello stesso modo in cui hai creato la TextBox per aggiungere i pulsanti. Come riferimento, usa la calcolatrice di Windows in visualizzazione Standard (Programmi > Accessori > Calcolatrice) come base per il layout della tua calcolatrice, omettendo i pulsanti "MC", "MR", "MS" e "M+". Su ogni pulsante, modifica le seguenti proprietà (usando il pulsante "+" come esempio): "(Name)" = btnPlus, "Caption" = +. Fai lo stesso per il resto dei pulsanti della calcolatrice, e poi salva il lavoro. La tua form dovrebbe ora assomigliare all'esempio mostrato qui.
Passaggio 5: Dichiarare le variabili
Aggiungi il codice. Nota che se i tuoi pulsanti e la textbox non sono nominati come il codice qui elencato si aspetta, dovrai cambiare i nomi per adattarli ai tuoi pulsanti e textbox, o cambiare i tuoi pulsanti e textbox per adattarli a questo codice. Prima dobbiamo creare alcune variabili per elaborare l'input della calcolatrice:
Dim sLeft As String, sRight As String, sOperator As String
Dim iLeft As Double, iRight As Double, iResult As Double
Dim bLeft As Boolean
Ogni calcolo consiste di quattro parti: un numero a sinistra dell'operatore (sLeft, iLeft), un operatore (sOperator), un numero a destra dell'operatore (sRight, iRight), e un risultato (iResult). Per tenere traccia se l'utente sta inserendo il numero di sinistra o di destra, dobbiamo creare una variabile booleana, bLeft. Se bLeft è true, si sta inserendo il lato sinistro del calcolo; se bLeft è false, si sta inserendo il lato destro.
Passaggio 6: Inizializzare bLeft
Inizializziamo la variabile bLeft. Lo facciamo creando una subroutine Form_Load, che puoi digitare come elencato qui o creare automaticamente facendo doppio clic su qualsiasi parte della form non coperta da un pulsante o textbox. All'interno della funzione, dobbiamo impostare bLeft su True, perché il primo numero inserito sarà la parte sinistra:
Private Sub Form_Load()
bLeft = True
End Sub
Passaggio 7: Gestire i pulsanti numerici
Crea una subroutine che gestirà il clic di uno qualsiasi dei pulsanti numerici. Creiamo questa come subroutine perché usiamo codice identico per ogni pulsante, e l'uso di una subroutine significa non dover ripetere lo stesso codice dieci volte. Inserisci quanto segue sotto la linea End Sub della subroutine Form_Load:
Private Sub AddNumber(sNumber As String)
If bLeft Then
sLeft = sLeft + sNumber
tbResult.Text = sLeft
Else
sRight = sRight + sNumber
tbResult.Text = sRight
End If
End Sub
Come puoi vedere, questa funzione prende un parametro stringa, sNumber, che conterrà il numero su cui l'utente ha cliccato. Se bLeft è true, questo numero viene aggiunto alla stringa che rappresenta il numero in fase di inserimento, sLeft, e la textbox, tbResult, viene aggiornata per visualizzare il nuovo numero. Se bLeft è false, la stessa operazione viene eseguita usando sRight invece.
Infine, crea una funzione evento Click per ogni numero che chiama la nostra subroutine AddNumber. Puoi farlo facilmente facendo doppio clic su ogni pulsante numerico, che creerà la struttura della subroutine per te. Poi aggiungi la chiamata a AddNumber, sostituendo il numero tra virgolette con il numero associato al pulsante. Per il pulsante zero, il tuo codice sarà simile a questo:
Private Sub btn0_Click()
AddNumber ("0")
End Sub
Allo stesso modo, per il pulsante uno, il tuo codice sarà simile a questo:
Private Sub btn1_Click()
AddNumber ("1")
End Sub
Passaggio 8: Gestire gli operatori
Gestisci gli operatori: più, meno, per, diviso. Lo faremo come l'ultimo passaggio, creando una subroutine che viene chiamata negli eventi Click per i pulsanti operatori. La subroutine sarà simile alla seguente:
Private Sub AddOperator(sNewOperator As String)
If bLeft Then
sOperator = sNewOperator
bLeft = False
Else
btnEquals_Click
sOperator = sNewOperator
sRight = ""
bLeft = False
End If
End Sub
Se bLeft è true, significa che l'utente ha appena inserito la parte sinistra del calcolo, questa subroutine imposta la variabile sOperator che abbiamo creato al passaggio 5 uguale all'operatore inserito, che viene passato a AddOperator come stringa sNewOperator. Il secondo passo è impostare bLeft su False, perché l'inserimento di un operatore significa che l'utente ha finito di inserire il lato sinistro dell'equazione. Per gestire inserimenti che concatenano più operatori, come 9 * 3 * 2 * 6, dobbiamo anche controllare se bLeft è false, significa che l'utente ha inserito un operatore dove ci aspettavamo un uguale. Prima chiamiamo l'evento Click per il pulsante uguale (descritto nel prossimo passo), che fa il calcolo e imposta tbResult al risultato di ciò che è già stato inserito. Poi cancelliamo sRight così l'utente può inserire il prossimo numero, e impostiamo bLeft su False così il programma sa che stiamo inserendo il lato destro del calcolo dopo.
Infine, aggiungi una chiamata AddOperator all'evento Click di ogni pulsante operatore, usando lo stesso metodo che abbiamo usato al passaggio 7 per creare gli eventi Click per i pulsanti numerici. Il tuo codice per il pulsante più sarà simile a questo:
Private Sub btnPlus_Click()
AddOperator ("+")
End Sub
Allo stesso modo, il codice per il pulsante meno sarà simile a questo:
Private Sub btnMinus_Click()
AddOperator ("-")
End Sub
Passaggio 9: Pulsante uguale
Crea l'evento Click per il pulsante uguale, che è il codice più complesso in questo programma. Crea la struttura della subroutine come hai fatto per gli altri pulsanti, facendo doppio clic sul pulsante uguale sulla tua form. La tua subroutine sarà simile a questa quando avrai inserito il codice:
Private Sub btnEquals_Click()
If sLeft <> "" And sRight = "" And sOperator <> "" Then
sRight = sLeft
End If
If sLeft <> "" And sRight <> "" And sOperator <> "" Then
iLeft = sLeft
iRight = sRight
Select Case sOperator
Case "+"
iResult = iLeft + iRight
Case "-"
iResult = iLeft - iRight
Case "/"
iResult = iLeft / iRight
Case "*"
iResult = iLeft * iRight
End Select
tbResult.Text = iResult
sLeft = iResult
sRight = ""
bLeft = True
End If
End Sub
Le prime tre righe di codice controllano se entrambi i lati del calcolo sono stati inseriti insieme a un operatore. Se solo il lato sinistro e un operatore sono inseriti, il valore del lato sinistro viene copiato a destra, così possiamo imitare il comportamento standard della calcolatrice per gestire un inserimento come 9 * =, che moltiplica 9 per se stesso per ottenere un risultato di 81. Il resto del codice verrà eseguito solo se sinistra, destra e operatore sono inseriti, e inizia copiando le stringhe di numeri nelle nostre variabili iLeft e iRight di tipo Double, che possono fare i calcoli effettivi. L'istruzione Select Case ci permette di eseguire codice diverso a seconda di quale operatore è stato inserito, ed esegue il calcolo effettivo, ponendo il risultato in iResult. Infine, aggiorniamo la textbox con il risultato, copiamo il risultato in sLeft, resettiamo sRight, e impostiamo bLeft = True. Queste ultime righe ci permettono di prendere il risultato del calcolo e usarlo per eseguire un altro calcolo.
Passaggio 10: Funzioni speciali (radice, %, 1/x)
Gestisci gli ultimi tre pulsanti operazione: radice quadrata, %, e 1/x. Per l'evento Click del pulsante radice quadrata, il tuo codice sarà simile a questo:
Private Sub btnSqrt_Click()
If sLeft <> "" Then
iLeft = sLeft
Else
iLeft = 0
End If
If sRight <> "" Then
iRight = sRight
Else
iRight = 0
End If
If bLeft Then
iLeft = Math.Sqr(iLeft)
tbResult.Text = iLeft
Else
iRight = Math.Sqr(iLeft)
tbResult.Text = iRight
End If
If iLeft <> 0 Then
sLeft = iLeft
Else
sLeft = ""
End If
If iRight <> 0 Then
sRight = iRight
Else
sRight = ""
End If
End Sub
Le prime 11 righe di codice assicurano che se non abbiamo un valore inserito per uno dei lati dell'equazione, sostituiamo zero invece di cercare di copiare una stringa vuota in iLeft o iRight, che genererebbe un errore. Le righe centrali eseguono la funzione radice quadrata sulla parte corrente del calcolo, sia sinistra che destra. Infine, invertiamo i controlli che abbiamo fatto all'inizio così che uno zero viene copiato come stringa vuota di nuovo in sLeft e sRight.
Per il pulsante percentuale, il codice è simile, con un'eccezione: l'operazione percentuale può essere eseguita solo se entrambi i lati sinistro e destro sono inseriti.
Private Sub btnPercent_Click()
If Not bLeft Then
If sRight <> "" Then
iRight = sRight
Else
iRight = 0
End If
iRight = iRight * (iLeft / 100)
tbResult.Text = iRight
If iRight <> 0 Then
sRight = iRight
Else
sRight = ""
End If
End If
End Sub
Infine, l'evento Click per 1/x, o frazione, che è molto simile al codice sopra:
Private Sub btnFraction_Click()
If sLeft <> "" Then
iLeft = sLeft
Else
iLeft = 0
End If
If sRight <> "" Then
iRight = sRight
Else
iRight = 0
End If
If bLeft Then
iLeft = 1 / iLeft
tbResult.Text = iLeft
Else
iRight = 1 / iRight
tbResult.Text = iRight
End If
If iLeft <> 0 Then
sLeft = iLeft
Else
sLeft = ""
End If
If iRight <> 0 Then
sRight = iRight
Else
sRight = ""
End If
End Sub
Passaggio 11: Pulsanti C e CE
Aggiungi codice per gestire i pulsanti C e CE. C cancella tutto l'input della calcolatrice, mentre CE cancella solo il numero attualmente in fase di inserimento.
Private Sub btnC_Click()
sLeft = ""
sRight = ""
sOperator = ""
tbResult.Text = "0"
bLeft = True
End Sub
Private Sub btnCE_Click()
If bLeft Then
sLeft = ""
Else
sRight = ""
End If
tbResult.Text = "0"
End Sub
Passaggio 12: Testare la calcolatrice
Esegui il tuo programma calcolatrice e fai qualsiasi calcolo desideri. Questa calcolatrice può essere facilmente estesa per gestire più operazioni, calcoli più complessi o anche per essere una calcolatrice scientifica con un po' di lavoro in più.
Suggerimento
Se incontri errori, controlla il tuo codice riga per riga, concentrandoti sulle righe che VB ha segnalato come contenenti errori, e confrontalo con il codice sopra. Il codice contenuto in questo articolo è stato completamente testato per essere privo di errori, quindi copiarlo fedelmente risulterà in un programma funzionale. Se stai usando una versione precedente di Visual Basic, potresti incontrare alcuni problemi dove sono state fatte modifiche nel linguaggio tra le versioni. Le versioni precedenti di VB, per esempio, usavano Math.Sqrt() invece di Math.Sqr() per eseguire un'operazione di radice quadrata. Controlla i Riferimenti per la tua versione specifica per vedere se sono necessarie modifiche.