Newsgroup: it.comp.lang.visual-basic
Titolo: come fare ??

esiste in VB qualcosa per calcolare il contenuto di una textbox e
visualizzare il risultato (tipo EVAL di Access).
Mi spiego meglio:
devo inserire in una textbox (e solo una) un contenuto del genere
(1.50+2.50)+((1.50+1.50)/2)
il risultato dovrebbe comparire in un'altra textbox....
TIA...

 0 Then
                    Start = i
                    Nest = 1
                Else
                    Nest = Nest + 1
                End If
            ElseIf Mid$(NewString, i, 1) = ")" Then
                Nest = Nest - 1
            End If
            If Nest = 0 Then
                Finish = i
                Exit For
            End If
        Next
        MathFunction = LCase(Mid$(NewString, Start - 3, 3))
        'Debug.Print MathFunction
        Expression = Mid$(NewString, Start, Finish - Start + 1)
        'Debug.Print "Expression = " & Expression
        TempString = CalcSimpleFunction(MathFunction, Expression)
        If TempString = "Error" Then GoTo BadFunction
 
        NewString = Left$(NewString, Start - 3 - 1) & TempString & 
Right$(NewString, L - Finish)
        'Debug.Print NewString
    Loop
    SimplifyCompositeString = NewString
    'Debug.Print NewString
    LastMathError = 0
    On Error GoTo 0
    Exit Function
ErrorCapture:
    SimplifyCompositeString = ""
    'MsgBox "CompositeString ErrorCapture"
    LastMathError = 2
    On Error GoTo 0
    Exit Function
 
BadFunction:
        SimplifyCompositeString = ""
        'MsgBox "BadFunctionInvoked"
        Exit Function
End Function
Private Function CalcSimpleFunction(MathFunction As String, Expression As 
String) As String
    Dim Val As Double
    Dim Param(5)
    Dim ParamString$, i%, N%, P#, X%
    If InStr(Expression, ",") Then
        ParamString = Expression
    Else
        Val = EvalPureString(PurifyString(Expression))
        If LastMathError <> 0 Then GoTo BadValue
    End If
    On Error GoTo BadValue
    Select Case MathFunction
        Case "abs"
            CalcSimpleFunction = Str(Format(Abs(Val), 
"###############.###############"))
        Case "atn"
            CalcSimpleFunction = Str(Format(Atn(Val), 
"###############.###############"))
        Case "cos"
            CalcSimpleFunction = Str(Format(Cos(Val), 
"###############.###############"))
        Case "exp"
            CalcSimpleFunction = Str(Format(Exp(Val), 
"###############.###############"))
        Case "fix"
            CalcSimpleFunction = Str(Format(Fix(Val), 
"###############.###############"))
        Case "int"
            CalcSimpleFunction = Str(Format(Int(Val), 
"###############.###############"))
        Case "log"
            CalcSimpleFunction = Str(Format(Log(Val), 
"###############.###############"))
        Case "rnd"
            CalcSimpleFunction = Str(Format(Rnd(Val), 
"###############.###############"))
        Case "sgn"
            CalcSimpleFunction = Str(Format(Sgn(Val), 
"###############.###############"))
        Case "sqr"
            CalcSimpleFunction = Str(Format(Sqr(Val), 
"###############.###############"))
        Case "sin"
            CalcSimpleFunction = Str(Format(Sin(Val), 
"###############.###############"))
        Case "tan"
            CalcSimpleFunction = Str(Format(Tan(Val), 
"###############.###############"))
        Case "ndf"
            CalcSimpleFunction = Str(Format(Ndf(Val), 
"###############.###############"))
            If CalcSimpleFunction = -1 Then GoTo BadValue
        Case "fac"
            CalcSimpleFunction = Str(Format(Factorial(CInt(Val)), 
"###############.###############"))
            If CalcSimpleFunction = -1 Then GoTo BadValue
        Case "pmt", "per", "fuv", "prv"
            ParamString = Mid$(ParamString, 2, Len(ParamString) - 2)
            For i = 0 To 3
                Param(i) = EvalPureString(PurifyString(Mid$(ParamString, 1, 
InStr(ParamString, ",") - 1)))
                ParamString = Right$(ParamString, Len(ParamString) - 
InStr(ParamString, ","))
            Next
            Param(4) = EvalPureString(PurifyString(ParamString))
 
            Select Case MathFunction
                Case "pmt"
                    CalcSimpleFunction = Str(Pmt(Param(0), Param(1), 
Param(2), Param(3), Param(4)))
                Case "fuv"
                    CalcSimpleFunction = Str(FV(Param(0), Param(1), 
Param(2), Param(3), Param(4)))
                Case "prv"
                    CalcSimpleFunction = Str(PV(Param(0), Param(1), 
Param(2), Param(3), Param(4)))
                Case "per"
                    CalcSimpleFunction = Str(NPer(Param(0), Param(1), 
Param(2), Param(3), Param(4)))
            End Select
        Case "bin"
            ParamString = Mid$(ParamString, 2, Len(ParamString) - 2)
            For i = 0 To 1
                Param(i) = EvalPureString(PurifyString(Mid$(ParamString, 1, 
InStr(ParamString, ",") - 1)))
                ParamString = Right$(ParamString, Len(ParamString) - 
InStr(ParamString, ","))
            Next
            Param(2) = EvalPureString(PurifyString(ParamString))
            N = CInt(Param(0))
            P = Param(1)
            X = CInt(Param(2))
            CalcSimpleFunction = Str(Binomial(N, P, X))
            If CalcSimpleFunction = -1 Then GoTo BadValue
        Case "poi"
            ParamString = Mid$(ParamString, 2, Len(ParamString) - 2)
            Param(0) = EvalPureString(PurifyString(Mid$(ParamString, 1, 
InStr(ParamString, ",") - 1)))
            ParamString = Right$(ParamString, Len(ParamString) - 
InStr(ParamString, ","))
            Param(1) = EvalPureString(PurifyString(ParamString))
            Val = Param(0)
            i = CInt(Param(1))
            CalcSimpleFunction = Str(Poisson(Val, i))
            If CalcSimpleFunction = -1 Then GoTo BadValue
        Case Else
            GoTo BadValue
    End Select
 
    On Error GoTo 0
    Exit Function
BadValue:
    CalcSimpleFunction = "Error"
    If LastMathError = 0 Then LastMathError = 4
    On Error GoTo 0
    Exit Function
 
End Function
Private Function Ndf(Val As Double) As Double
    Dim Dummy
    Dim Sum As Double
    Dim Fac As Double
    Dim Term As Double
    Dim N As Double
    Screen.MousePointer = 11
    On Error GoTo NdfError
    Fac = 1#
    N = 0#
    Sum = 1# / 2#
    Do
        Fac = Fac * N
        If N = 0# Then Fac = 1#
        Term = (Val) ^ (2# * N + 1#)
        Term = Term / (Fac * (2 ^ N) * (2 * N + 1))
        Term = Term / Sqr(2 * 3.14159265358979)
        Term = Term * (-1) ^ N
        'Term = ((-1#) ^ N / (Fac * 2# ^ N * (2# * N + 1#)) * (Val) ^ (2# * 
N + 1#)) / Sqr(2# * 3.14159265358979)
        Sum = Sum + Term
        'Debug.Print "N = " & N
        'Debug.Print "Fac = " & Fac
        'Debug.Print "Term = " & Term
        'Debug.Print "Sum = " & Sum
        'Debug.Print
 
        N = N + 1#
        Dummy = DoEvents()
    Loop While Abs(Term) > 1E-18
    Ndf = Int(10000000 * Sum) / 10000000
    Screen.MousePointer = 0
    Exit Function
NdfError:
    Ndf = -1
    Screen.MousePointer = 0
    Exit Function
End Function
Private Function Poisson(Lambda As Double, X As Integer) As Double
    Dim i%
    On Error GoTo PoissonError
 
    Poisson = Int(10000000 * Exp(-Lambda) * (Lambda ^ X) / Factorial(X)) / 
10000000
    'Debug.Print Poisson, Fac, X, Exp(-Lambda), Lambda ^ X
    Exit Function
PoissonError:
    Poisson = -1
    Exit Function
End Function
Private Function Factorial(X As Integer) As Double
    Dim i%, Fac
    Fac = 1
    If X > 0 And X < 18 Then
        For i = 1 To X
            Fac = i * Fac
        Next
    ElseIf X = 0 Then
        Fac = 1
    Else
        Fac = -1
    End If
    Factorial = Fac
End Function
Private Function Binomial(N As Integer, P As Double, X As Integer) As 
Double
    If X < 0 Or X > N Or P < 0 Or P > 1 Then
        Binomial = -1
    Else
        Binomial = Factorial(N) / Factorial(X) / Factorial(N - X) * P ^ X * 
(1 - P) ^ (N - X)
    End If
End Function

questo codice è molto meglio):
[snippone su 500 righe di codice free]
Complimenti !
Questo me lo incamero anch'io, mi sara' certamente utile :-)))
ciao, hal

questo codice è molto meglio):
Mega snip cut sgnaps
wow... che ne dici di impacchettarlo e pubblicarlo sul Sito Comune?
Ciao,
Moreno
#sirri#@#
morenosoft.com#
(togliete "#" dall'indirizzo)
Moreno Sirri VB Site - 
http://www.msvbsite.net
---------------------------------------------------------------------------
Le risposte alle tue domande le trovi sul Sito Comune di questo NewsGroup:
 
http://www.it-lang-vb.net
---------------------------------------------------------------------------


[cut]
Niente male!
Postalo al S.C.
ciao
ugo

 wrote in 
news:9p2k6f$i8h$
1...@pegasus.tiscalinet.it
:

Vi ringrazio per i complimenti, ma non č il mio :-)
non so dove l'ho preso, sinceramente non avendo il suo autore lasciato 
tracce nei commenit del codice...
per quanto riguarda il sito comune... qual č? :-)

 per quanto riguarda il sito comune... qual č? :-)
http://www.it-lang-vb.net/
ciao
ugo

per quanto riguarda il sito comune... qual è? :-)
L'URL ormai ce l'hai...
per quanto riguarda l'autore... mmm... si potrebbe attribuirlo al
fantomatico "?" già autore di molti progetti del SC, per lo più i
primissimi... l'unico problema è: è distribuibile? Non essendoci
disclaimer credo che nulla lo vieti... no?
Ciao,
Moreno
#sirri#@#morenosoft#.com


disclaimer credo che nulla lo vieti... no?
Sul sito segnalato non c'e'rano disclaimer.
ciao, hal


[cut]
Insisto... ma voi due non dormite mai...  :PPP
ciao
ugo

 wrote in news:9p2qsq$fp3rj$1@ID-
56381.news.dfncis.de
:
è distribuibile ed utilizzabile liberamente, ne sono certo. sul sito che da 
cui l'ho preso c'era scritto esplicitamente. però proprio non riesco a 
ritrovare il sito...

ritrovare il sito...
e allora l' aspettiamo sul sc :-)))
ciao, hal