Discussione chiusa
Pagina 1 di 3 123 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 21

Discussione: Somma algebrica tra varie Textbox

  1. #1
    fabiro77 non è in linea Scolaretto
    Post
    142

    Question Somma algebrica tra varie Textbox

    Ciao a tutti,
    sono qui per esporvi un mio problema che, nonostante i consigli di vari amici, non rieco a risolvare.

    Ho un Form con 4 Textbox, 3 di input (text1, 2 e 4) e l'ultima (la text3) di output.
    Inserendo valori numerici nelle prime 3, l'ultima dovrebbe darmi la somma algebrica esatta, completa di decimali.

    Ho cercato di far in modo che sia possibile, nelle text di input, inserire solo numeri e NON lettere per evitare il Debug.
    Il risultato è quasi sufficiente, se non fosse per dei particolari:
    1) se l'utente inserisce per errore la "virgola" 2 volte, il programma si blocca.. ed è ovvio. Come faccio a risolvere il problema?
    2) vorrei che le textbox fossero "formattate" in modo tale che inserendo ad es. 1000, in automatico mi evidenzino "1.000,00". E' possibile?
    3) il codice usato è quello che riporto di seguito, esiste un modo per renderlo più snello dato che in una textbox ho ben 35 textbox in input?

    Vi ringrazio per le risposte che mi invierete e vi posto il codice usato:

    codice:
    Dim SommN1
    Dim SommN2
    Dim SommN3
    
    Private Sub Form_Load()
    
    ’ somma i valori delle textbox ed assegnare il formato alla textbox somma (text3)
    Text3.Text = Format(CDbl(SommN1) + CDbl(SommN2) + CDbl(SommN3), "#,##0.00")
    End Sub
    
    Private Sub Text1_Change()
    SommN1 = (Text1.Text)
    SommN2 = (Text2.Text)
    SommN3 = (Text4.Text)
     
    ‘se il valore della textbox1 viene cancellato o è =0 assegna automaticamente il valore zero
    If Text1 = "" Then
        Text1.Text = "0"
    Else
        Text3.Text = Format(CDbl(SommN1) + CDbl(SommN2) + CDbl(SommN3), "#,##0.00")
    End If
      
    End Sub
    
    ‘ permetti l’inserimento dei soli numeri nella textbox1
    Private Sub Text1_KeyPress(KeyAscii As Integer)
    Const Numbers$ = "0123456789,"
    If KeyAscii <> 8 Then
        If InStr(Numbers, Chr(KeyAscii)) = 0 Then
            KeyAscii = 0
        End If
    End If
    End Sub
    
    Private Sub Text2_Change()
    SommN1 = (Text1.Text)
    SommN2 = (Text2.Text)
    SommN3 = (Text4.Text)
    
    ‘se il valore della textbox2 viene cancellato o è =0 assegna automaticamente il valore zero
    If Text2 = "" Then
        Text2.Text = "0"
    Else
        Text3.Text = Format(CDbl(SommN1) + CDbl(SommN2) + CDbl(SommN3), "#,##0.00")
    End If
      
    End Sub
    
    ‘ permetti l’inserimento dei soli numeri nella textbox2
    Private Sub Text2_KeyPress(KeyAscii As Integer)
    Const Numbers$ = "0123456789,"
    If KeyAscii <> 8 Then
        If InStr(Numbers, Chr(KeyAscii)) = 0 Then
            KeyAscii = 0
        End If
    End If
    End Sub
    
    Private Sub Text4_Change()
    SommN1 = (Text1.Text)
    SommN2 = (Text2.Text)
    SommN3 = (Text4.Text)
    
    ‘se il valore della textbox4 viene cancellato o è =0 assegna automaticamente il valore zero
    If Text4 = "" Then
        Text4.Text = "0"
    Else
        Text3.Text = Format(CDbl(SommN1) + CDbl(SommN2) + CDbl(SommN3), "#,##0.00")
    End If
    End Sub
    
    ‘ permetti l’inserimento dei soli numeri nella textbox4
    Private Sub Text4_KeyPress(KeyAscii As Integer)
    Const Numbers$ = "0123456789,"
    If KeyAscii <> 8 Then
        If InStr(Numbers, Chr(KeyAscii)) = 0 Then
            KeyAscii = 0
        End If
    End If
    End Sub
    Ultima modifica di TheTruster; 02-04-2007 15:25 

  2. #2
    Wally non è in linea Scolaretto
    Post
    401
    1 - Puoi utilizzare diverse soluzioni; la prima che mi viene in mente è quella di utilizzare un flag booleano che indichi se la virgola è già stata inserita; in tal caso, non permette inserimento di altre virgole;

    2 - Nel codice che hai postato utilizzi già la funzione "Format" che fa al tuo caso:
    codice:
    Text3.Text = Format(CDbl(SommN1) + CDbl(SommN2) + CDbl(SommN3), "#,##0.00")
    utilizzala anche per le textbox in cui ti interessa la formattazione;

    3 - Devi creare un "array di controlli"; se cerchi su un qualunque libro o guida di vb, troverai come applicare tale tecnica. Se avrai bisogno di particolari approfondimenti (l'argomento è vasto e non lo si può trattare con poche parole in un post) chiedi pure
    Ciao ciao,
    Wally

    http://at-wally.blogspot.com/

    - Se un utente ti è stato d'aiuto usa il pulsante Commenta Intervento per aumentare la sua reputazione!

  3. #3
    L'avatar di yronium
    yronium non è in linea Scribacchino
    Luogo
    Prato
    Post
    1,338
    Ciao. Ti riporto la modifica che dovresti fare nel codice.
    codice:
    ' permetti l’inserimento dei soli numeri nella textbox1
    Private Sub Text1_KeyPress(KeyAscii As Integer)
        Const Numbers$ = "0123456789,"
    
        ' ===  Aggiungi queste righe nelle tre textbox di input  ===
        ' impedisce l'inserimento di una seconda virgola nella textbox
        If Not InStr(Text1.Text, ",") = 0 Then KeyAscii = 0
        ' ===  (fine aggiunta)  ===
    
        If KeyAscii <> 8 Then
            If InStr(Numbers, Chr(KeyAscii)) = 0 Then
                KeyAscii = 0
            End If
        End If
    End Sub
    Inoltre, prima di fare la somma algebrica dovresti testare il contenuto di ogni textbox con la funzione IsNumeric(), con qualcosa tipo
    If Not IsNumeric(Text1.Text) Then SommN1 = 0 ....

    Infine, ma è solo un commento, non dovresti lavorare nell'evento KeyPress ma nell'evento Change della textbox. In questo caso puoi controllare i caratteri inseriti tramite l'operatore Like, e visto che tempo fa ne è stato anche parlato in questo forum puoi trovare degli esempi nei vecchi post.

    Spero sia utile. Ciao.
    Ultima modifica di yronium; 02-04-2007 15:24 

  4. #4
    fabiro77 non è in linea Scolaretto
    Post
    142

    Question

    Ciao a tutti e grazie!!
    Poiché non riesco a capire tutte le vostre soluzioni chiedo:

    X WALLY

    1) il codice da assegnare alle textbox di input è corretto così:
    Text1.Text = Format "#,##0.00"

    2) per l'Array di controlli non capisco sarebbe possibile fare un esempio di codice con riferimento al mio caso (3 textbox)

    X yronium

    1) per la funzione IsNumeric(), poiché non la conosco, potresti farmi un esempio di codice completo che dovrei inserire nelel texbox?

    2) seguirò il tuo consiglio inserendo il codice nell'evento Change(), e ti farò sapere.

    GRAZIE ANCORA A TUTTI..

  5. #5
    Wally non è in linea Scolaretto
    Post
    401
    Quote Originariamente inviato da fabiro77 Visualizza il messaggio
    Ciao a tutti e grazie!!
    Poiché non riesco a capire tutte le vostre soluzioni chiedo:

    1) il codice da assegnare alle textbox di input è corretto così:
    Text1.Text = Format "#,##0.00"

    2) per l'Array di controlli non capisco sarebbe possibile fare un esempio di codice con riferimento al mio caso (3 textbox)
    1 - il parametro passato alla format è corretto, la maniera in cui la utilizzi no. Dovresti sapere, infatti, che la sintassi corretta è Text1.Text = Format("#,##0.00")

    2 - il mio consiglio è quello di leggere qualche paginetta, giusto per renderti conto di cosa significa "array di controlli"; a quel punto non avrai bisogno di esempi perchè sarai in grado di muoverti *da solo*; se dovessi avere problemi specifici, puoi chiedere, ma prima documentati per bene.
    Ciao ciao,
    Wally

    http://at-wally.blogspot.com/

    - Se un utente ti è stato d'aiuto usa il pulsante Commenta Intervento per aumentare la sua reputazione!

  6. #6
    L'avatar di Hertz01
    Hertz01 non è in linea Novello
    Luogo
    Arluno
    Post
    40
    Ciao Fabiro
    Prima di tutto dovresti ottimizzare il codice creando un'array di controlli.
    Le tre textbox che usi per inserire chiamale
    Text1(0)
    Text1(1)
    Text1(2)

    e quella di output Text2

    Quello tra parentesi è l'indice. Cancella tutte e 4 le tue Text nel form, crei Text1 e la copi 2 volte, VB ti crea l'indice da solo. Successivamente crei Text2

    Il codice da inserire è:

    Dim SommN(0 To 2) As Currency
    Const Numbers = "0123456789,"

    Private Sub Form_Load()

    Call Formatta

    End Sub

    Private Sub Formatta()

    'somma i valori delle textbox ed assegnare il formato alla textbox somma (text2)
    Text2.Text = Format((SommN(0) + SommN(1) + SommN(2)), "#,##0.00")

    End Sub

    Private Sub Text1_Change(Index As Integer)

    SommN(Index) = Text1(Index).Text

    'se il valore della textbox1 viene cancellato assegna automaticamente il valore zero
    If Text1(Index) = "" Then Text1(Index).Text = "0"

    Call Formatta

    End Sub

    'permetti l’inserimento dei soli numeri nella textbox1
    Private Sub Text1_KeyPress(Index As Integer, KeyAscii As Integer)

    If KeyAscii <> 8 Then 'Esclude il Backspace
    If InStr(Numbers, Chr(KeyAscii)) = 0 Then KeyAscii = 0 'Permette solo i numeri e la virgola
    If InStr(Text1(Index), Chr(44)) > 1 Then 'Controlla se presente più di una virgola
    If KeyAscii = 44 Then KeyAscii = 0 'Se la virgola è già presente non permette di scriverne altre
    End If
    End If

    End Sub

  7. #7
    L'avatar di yronium
    yronium non è in linea Scribacchino
    Luogo
    Prato
    Post
    1,338
    Quote Originariamente inviato da fabiro77 Visualizza il messaggio
    1) per la funzione IsNumeric(), poiché non la conosco, potresti farmi un esempio di codice completo che dovrei inserire nelel texbox?
    Posto dal tuo stesso codice:
    codice:
    Private Sub Text1_Change()
        ' === Righe modificate ===
        If IsNumeric(Text1.Text) Then SommN1 = CDbl(Text1.Text) Else SommN1 = 0
        If IsNumeric(Text2.Text) Then SommN2 = CDbl(Text2.Text) Else SommN2 = 0
        If IsNumeric(Text4.Text) Then SommN3 = CDbl(Text4.Text) Else SommN3 = 0
        ' === (fine modifiche) ===
    
        ‘se il valore della textbox1 viene cancellato o è =0 assegna automaticamente il valore zero
        If Text1 = "" Then
            Text1.Text = "0"
    
        Else
    
            Text3.Text = Format(CDbl(SommN1) + CDbl(SommN2) + CDbl(SommN3), "#,##0.00")
        End If
    Per saperne di più, scrivi IsNumeric, selezionalo e premi F1.


    Inoltre, potresti ancora migliorare il tuo codice mettendo tutti gli aggiornamenti in routine separate, da richiamare di volta in volta negli eventi di ogni textbox. In questo modo non è nemmeno necessario creare un array di controlli.
    Ciao.

  8. #8
    L'avatar di tippolo
    tippolo non è in linea Scolaretto
    Post
    377
    Ciao,
    Scusate ma non riesco a capire questo:

    codice:
    Private Sub Form_Load()
    
    ’ somma i valori delle textbox ed assegnare il formato alla textbox somma (text3)
    Text3.Text = Format(CDbl(SommN1) + CDbl(SommN2) + CDbl(SommN3), "#,##0.00")
    End Sub
    non capisco il che senso abbia fare una somma di Text vuote al caricamento del Form
    Mi son perso qualcosa?
    Quando tutto va bene, qualcosa andrà male.
    ___________________________________
    Non hai ancora firmato la petizione per VB? Clicca QUI

  9. #9
    L'avatar di Hertz01
    Hertz01 non è in linea Novello
    Luogo
    Arluno
    Post
    40
    non capisco il che senso abbia fare una somma di Text vuote al caricamento del Form
    Mi son perso qualcosa?
    Ciao Trippolo
    Io ho visto che fabiro77 lo ha messo dunque io l'ho lasciato.
    In questo modo hai la text del risultato che al posto di apparire vuota visualizza 0.00 (Se non ricordo male) dunque formattata. Sarebbe stato più semplice scrivere nella text "0.00"? Bè, si..

  10. #10
    fabiro77 non è in linea Scolaretto
    Post
    142
    Ciao ragazzi,
    utilizzo il seguente codice per assegnate la formattazione alla textbox 3 (somma).

    Private Sub Form_Load()
    ’ somma i valori delle textbox ed assegnare il formato alla textbox somma (text3)
    Text3.Text = Format(CDbl(SommN1) + CDbl(SommN2) + CDbl(SommN3), "#,##0.00")
    End Sub

    Proverò stasera i vostri suggerimenti e vi farò sapere.
    GRAZIE INFINITE!!!!!!!!!!!!!!!!!!!!!!

Discussione chiusa
Pagina 1 di 3 123 ultimoultimo

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi