Newsgroup: it.comp.lang.visual-basic
Titolo: Esiste un modo per....???

Il mio problema e' che un cliente mi ha chiesto..
posso inserire in un TextBox una espressione del tipo
=300*20  
e dopo in uscita lui mi rimette il risultato...
io come un allocco ho detto NESSUN problema ci penso io..convinto che
usando il LostFocus e la proprieta' di "&" ci sarei riuscito
agevolmente..dimenticando pero' (si lo so son stupido) che la "&" alla
1uale pensavo si riferiva al clipper...insomma se son stato chiaro e'
possibile realizzare una cosa del genere??' e come?? Grazie Davvero !!!!

si ovviamente
l'avevo fatta un tempo.... non so dove sia finita ..
la struttura è semplice CMQ
dal punto che un dato deve essere numerico   per mezzo di una funzione
elimini tutti i "caratteri" indesiderati.
indi con un select case  sviluppi il calcolo (se vuoi tenere conto
dell'ordine delle operazioni e delle parentesi la cosa si fa
complessa(oddio...complessa....) , ma sempre fattibile)
solo che oltre all'operando devi individuare il valore degli operatori.
In fase di costruzione del form sarebbe (a mio avviso) + semplice ed
estetico prevedere due o + textbox e valore  "" che converti in "0" poi...
in fase di calcolo separati da combobox con default ("+") e aventi in lista
tutti gli operatori.
Magari invisibili... che compaiano solo alla pressione di un tasto "* / + -
^....ecc)
Ciao !
la miglior cosa sarebbe "impedire" all'utente di introburre lettere , o
simboli non accettati in fase di calcolo.
Daniele wrote in message <01be93f3$7b171980$b4d8d8d4@dany>...



Sul Sito Comune c'č un esempio di valutatore di espressioni che fa al caso
tuo. Io l'ho scaricato ma devo ancora provarlo..
Leo



Se ho capito bene nella casella uno scrive "=2*3" e nella stessa casella
deve apparire il risultato?

allora prima di tutto copia la scritta in una variabile string.

poi crea due varuabili integer (o long, dipende dai valori)

e scrivi:

num1=mid(stringa,2,1)


num2=mid(stringa,4,1)


In questo modo nelle due variabili ci saranno i due valori.

Ora per determinare l'operazione fai come prima (
oper=mid(stringa,3,1)
)
e confronti il contenuto della variabile con i simboli di operazione

poi, se per esempio l'operazione è +, scrivi: 
text1.text=val(num1+num2)


In questo modo nella casella text ci sarà il risultato.

Ecco il mio listato d'esempio:

Dim str As String


Dim num1, num2 As Integer


Dim oper


str = Text1.Text


num1 = Mid(str, 2, 1)


num2 = Mid(str, 4, 1)


oper = Mid(str, 3, 1)


Select Case oper


Case "+"


Text1.Text = Val(num1 + num2)


Case "*"


Text1.Text = Val(num1 * num2)


Case "/"


Text1.Text = Val(num1 / num2)


Case "-"


Text1.Text = Val(num1 - num2)


End Select


Tango

Daniele ha scritto:



Ciao,
va solo ottimizzata
Private Sub Text1_LostFocus()
    Dim Segno(3) As String, N As Integer
    Dim PosSegno As Integer
    Segno(0) = "*"
    Segno(1) = "/"
    Segno(2) = "+"
    Segno(3) = "-"
    For N = 0 To 3
        PosSegno = InStr(Text1, Segno(N))
        If PosSegno Then
            Select Case Segno(N)
                Case "*"
                    Text1 = Val(Mid(Text1, 1, PosSegno - 1)) *
Val(Mid(Text1, PosSegno + 1))
                Case "/"
                    Text1 = Val(Mid(Text1, 1, PosSegno - 1)) /
Val(Mid(Text1, PosSegno + 1))
                Case "+"
                    Text1 = Val(Mid(Text1, 1, PosSegno - 1)) +
Val(Mid(Text1, PosSegno + 1))
                Case "-"
                    Text1 = Val(Mid(Text1, 1, PosSegno - 1)) -
Val(Mid(Text1, PosSegno + 1))
            End Select
            Exit For
        End If
    Next N
End Sub
beppe
Daniele ha scritto nel messaggio <01be93f3$7b171980$b4d8d8d4@dany>...



Puoi usare il valutatore di espressioni dello Script Control. Una volta
aggiunto il controllo puoi usarlo in questo modo:
Debug.Print ScriptControl1.Eval("5 + 4 * 3")
che ti restituisce 17 nella finestra di debug.
Maggiori informazioni su questo controllo sono disponibili all'indirizzo:
http://www.microsoft.com/scripting/
Ciao
Gian Michele Bertoni
homepage: 
http://space.tin.it/computer/gbertoni


