Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1

    [VB6] controllo textbox

    Ciao a tutti,allora cerco di spiegarmi meglio.Sto creando un archivio del lotto,
    composto da 55 text1(index) 11 righe (ruote) e 5 Colonne(estratti)
    dò un esempio

    Bari 51- 6-79-89-28
    Cagliari 67-28-11-78-47
    Firenze 13-16-71-76-83
    e così via fino alla undicesima ruota
    la routine che ho bisogno,deve controllare
    che per ogni singola ruota non sia possibile ripetere un numero già inserito e così anche per le altre,ed infine che tutti i numeri in textbox siano stati scritti.


    Alarico_Re

  2. #2
    Moderatore di CMS L'avatar di kalosjo
    Registrato dal
    Jul 2001
    residenza
    In culo alla luna
    Messaggi
    1,999
    Io ti consiglierei di creare 11 gruppi di textbox, uno per ogni ruota

    Ruota1txt(0), Ruota1txt(1),.... Ruota1txt(5)
    Ruota2txt(0), Ruota2txt(1),.... Ruota2txt(5)
    Ruota3txt(0), Ruota3txt(1),.... Ruota3txt(5)
    .....
    Ruota11txt(0), Ruota11txt(1),.... Ruota11txt(5)

    Così puoi fare i controlli più facilmente...
    Scusate i puntini di sospensione...... La verità è che non ho argomenti....

  3. #3
    Utente di HTML.it L'avatar di Jupy64
    Registrato dal
    Sep 2004
    Messaggi
    1,151
    Ciao, visto che questo thread si riaggancia alll'altro tuo thread http://forum.html.it/forum/showthrea...readid=858906,
    Visto che tu usi array di controlli textBox, per ottimizzare il tutto e risolvere il tuo problema, ti posto un progetto che ho buttato giù al momento completo e ottimizzato per l'inserimento e controllo delle estrazioni..magari da rivedere e ottimizzarlo per le tue esigenze.

    codice:
    Option Explicit
    Private Declare Function GetWindowLong Lib "User32.dll" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
    Private Declare Function SetWindowLong Lib "User32.dll" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
    
    Const GWL_STYLE As Long = (-16)
    Const ES_NUMBER As Long = &H2000
    
    Dim defStyle As Long
    
    Private Sub SetNumeric(tHwnd As Long)
       SetWindowLong tHwnd, GWL_STYLE, defStyle Or ES_NUMBER
    End Sub
    
    Private Sub SetTextNumber()
       Dim i As Integer
       For i = 0 To Text1.Count - 1
          SetNumeric Text1(i).hwnd
       Next
    End Sub
    
    'controlla che siano state inserite tutte le estrazioni
    Private Function InserimentoOk() As Boolean
       Dim i As Integer
       InserimentoOk = True
       For i = 0 To Text1.Count - 1
          If Val(Text1(i)) = 0 Then
             InserimentoOk = False
             MsgBox "Non sono state inserite tutte le estrazioni!"
             Text1(i).SetFocus
             Exit For
          End If
       Next
    End Function
    
    Private Sub btnSalvaDati_Click()
       'prima di procedere al salvataggio dei dati, controlla che siano state inserite tutte le estrazioni
       If InserimentoOk Then
          'procedura per salvare i dati
       End If
    End Sub
    
    'controlla che non sia stato ripetuto il numero sulla stessa ruota
    Private Function CheckNumber(indexTxt As Integer) As Boolean
       Dim i As Integer
       Dim idxTxt As Integer
       CheckNumber = False
       Select Case indexTxt
          Case 0 To 4
             idxTxt = 0
          Case 5 To 9
             idxTxt = 5
          Case 10 To 14
             idxTxt = 10
          Case 15 To 19
             idxTxt = 15
          Case 20 To 24
             idxTxt = 20
          Case 25 To 29
             idxTxt = 25
          Case 30 To 34
             idxTxt = 30
          Case 35 To 39
             idxTxt = 35
          Case 40 To 44
             idxTxt = 40
          Case 45 To 49
             idxTxt = 45
       End Select
       For i = idxTxt To (idxTxt + 4)
          If Not i = indexTxt Then
             If Text1(i).Text = Text1(indexTxt) Then
                CheckNumber = True
                Exit For
             End If
          End If
       Next
    End Function
    
    Private Sub Form_Load()
       'Inizializzazione delle textBox relative alle estrazioni, ad accettare solo numeri
       defStyle = GetWindowLong(Text1(0).hwnd, GWL_STYLE)
       SetTextNumber
    End Sub
    
    Private Sub Text1_Change(Index As Integer)
       If Len(Text1(Index)) = 2 Then
          'attenzione, la proprietà TabIndex delle textBox relative alle estrazioni,devono essere sequenziali dalla prima all'ultima 
          SendKeys "{TAB}", True
       End If
    End Sub
    
    Private Sub Text1_Validate(Index As Integer, Cancel As Boolean)
       'attenzione, la proprietà Maxlength delle textBox relative alle estazione, deve essere impostata a 2 
       If Len(Trim(Text1(Index).Text)) > 0 Then
          If Len(Text1(Index).Text) = 1 And Not Val(Text1(Index).Text) = 0 Then
             Text1(Index).Text = "0" & Text1(Index).Text
          End If
          If Val(Text1(Index).Text) < 1 Or Val(Text1(Index).Text) > 90 Then
             MsgBox "L'estrazione deve essere compresa tra 1 e 90"
             Text1(Index).Text = ""
             Cancel = True
          ElseIf CheckNumber(Index) Then
             MsgBox "Il numero [" & Text1(Index) & "] è già inserito!"
             Text1(Index).Text = ""
             Cancel = True
          End If
       End If
    End Sub
    Jupy

  4. #4
    Ciao Jupy64, ti ringrazio per l'aiuto
    ho provato la routine è c'è un problema quando comincio ad inserire i numeri dopo il primo inserimento (2 numeri) nel 1 Text1boxil il tab passa alla 2 text1box è mi fa inserire un solo numero e passa alla 3
    text1box.
    ho inserito nella routine
    Case 50 to 54
    idxTxt = 50

    perchè le ruote sono 11

    Alarico_Re

  5. #5
    Utente di HTML.it L'avatar di Jupy64
    Registrato dal
    Sep 2004
    Messaggi
    1,151
    Ciao, forse hai sbagliato qualcosa nel riportare l'esempio che ti ho fatto.. in quanto ho fatto delle prove e non succede quanto detto da te! inserendo un numero a 2 cifre automaticamente mi passa alla seconda textbox e inserisco tranquillamente un numero a 2 cifre..ricontrolla il codice.. oppure passami la parte di codice che hai tu...
    Per l'aggiunta che hai fatto va benissimo, non mi ricordavo che ora le ruote sono 11..
    Jupy

  6. #6
    Ciao questo è il codice che ho io

    Private Sub CmdAnnulla_Click()

    Data1.Recordset.CancelUpdate

    CmdSalva.Visible = False
    CmdPrima.Enabled = True
    CmdUltima.Enabled = True
    CmdAvanti.Enabled = True
    CmdIndietro.Enabled = True
    CmdAnnulla.Visible = False
    CmdModifica.Visible = True
    CmdNuova.Visible = True
    CmdStampa.Enabled = True
    End Sub

    Private Sub CmdAvanti_Click()

    Data1.Recordset.MoveNext
    If Data1.Recordset.BOF = True Then
    Data1.Recordset.MoveNext
    ElseIf Data1.Recordset.EOF = True Then
    Data1.Recordset.MovePrevious
    End If

    End Sub

    Private Sub CmdChiudi_Click()
    'Esce dal programma.
    Unload Me

    End Sub

    Private Sub CmdIndietro_Click()

    Data1.Recordset.MovePrevious

    If Data1.Recordset.BOF = True Then
    Data1.Recordset.MoveNext
    ElseIf Data1.Recordset.EOF = True Then
    Data1.Recordset.MovePrevious
    End If

    End Sub

    Private Sub CmdModifica_Click()
    Data1.Recordset.Edit


    CmdSalva.Visible = True
    CmdAnnulla.Visible = True
    CmdPrima.Enabled = False
    CmdUltima.Enabled = False
    CmdAvanti.Enabled = False
    CmdIndietro.Enabled = False
    CmdNuova.Visible = False
    CmdStampa.Enabled = False

    End Sub

    Private Sub CmdNuova_Click()

    Data1.Recordset.AddNew


    CmdPrima.Enabled = False
    CmdUltima.Enabled = False
    CmdAvanti.Enabled = False
    CmdIndietro.Enabled = False
    CmdSalva.Visible = True
    CmdAnnulla.Visible = True
    CmdModifica.Visible = False
    CmdStampa.Enabled = False

    End Sub

    Private Sub CmdPrima_Click()

    Data1.Recordset.MoveFirst

    End Sub

    Private Sub CmdSalva_Click()
    Data1.Recordset.Update

    CmdPrima.Enabled = True
    CmdUltima.Enabled = True
    CmdAvanti.Enabled = True
    CmdIndietro.Enabled = True
    CmdSalva.Visible = False
    CmdAnnulla.Visible = False
    CmdModifica.Visible = True
    CmdNuova.Visible = True
    CmdStampa.Enabled = True
    End Sub

    Private Sub CmdStampa_Click()

    Archivio.PrintForm

    End Sub

    Private Sub CmdUltima_Click()

    Data1.Recordset.MoveLast

    End Sub

    Private Sub Data1_Validate(Action As Integer, Save As Integer)
    Dim risposta As Integer
    If Save = True Then
    risposta = MsgBox("Salvare Nuova Estrazione?", vbQuestion + vbYesNo, Me.Caption)
    If risposta = vbNo Then
    Text1(Index).DataChanged = False
    Textdata(Index).DataChanged = False
    textrecord.DataChanged = False
    Textposizione.DataChanged = False

    End If
    End If



    End Sub



    Private Sub Textdata_GotFocus(Index As Integer)
    Textdata(Index).BackColor = vbYellow

    End Sub

    Private Sub Textdata_LostFocus(Index As Integer)
    Textdata(Index).BackColor = vbWhite
    End Sub

    Private Sub Textposizione_GotFocus()
    Textposizione.BackColor = vbYellow

    End Sub

    Private Sub Text1_GotFocus(Index As Integer)
    Text1(Index).BackColor = vbYellow

    End Sub

    Private Sub Text1_LostFocus(Index As Integer)
    Text1(Index).BackColor = vbWhite
    End Sub

    Private Sub Textposizione_LostFocus()
    Textposizione.BackColor = vbWhite
    End Sub

    Private Sub textrecord_GotFocus()
    textrecord.BackColor = vbYellow

    End Sub

    Private Sub textrecord_LostFocus()
    textrecord.BackColor = vbWhite
    End Sub
    ho problemi anche per il controllo della DATA1
    quando visualizzo le estrazioni i textbox sono modificabili
    quindi vorrei bloccarli quando visualizzo e sbloccarli quando inserisco una nuova o modifica

    Alarico_Re

  7. #7
    Ciao Jupy64 ,ho risolto il problema l'errore me lo dava perchè non caricavo l'archivio.
    adesso per completare l'archivio mi serve un aiuto per il Data1
    cioè visualizzare i record ma senza poterli modificare,
    solo quando aggiungo o modifico un record.
    quando apro l'archivio parte sempre dal primo record ,vorrei che aprisse dall'ultimo.
    piccolo problema i numeri da controllare sono da 0 a 90,lo zero se ripetuto non dobrebbe darmi errore,questo perchè se qualche estrazione non venisse svolta dovrei inserire tutti zero
    Alarico_Re

  8. #8
    Utente di HTML.it L'avatar di Jupy64
    Registrato dal
    Sep 2004
    Messaggi
    1,151
    Ciao, per quanto riguarda il fatto di bloccare le textbox potresti seguire i consigli che ti hanno dato impostando la proprietà Locked=true, anche se, considerando che quando carichi i dati gli eventi che usi per l'inserimento si possono scatenare... forse, anche se comporta più lavoro, per la visualizzasione ti converrebbe usare delle label impostando il bordo a 3D..comunque sono gusti, vedi tu.

    Per visualizzare l'ultimo record inserito, li dipende molto da come apri la tabella, se usi una query potresti impostare l'ordine sulla data di estrazione in modo decrescente, altrimenti quando apri la tabella fai un MoveLast tramite la proprietà del recordset.

    Se vuoi permettere l'inserimento dello zero e anche ripetuto sulla stessa riga allora devi fare alcune modifiche:
    codice:
    Private Function CheckNumber(indexTxt As Integer) As Boolean
    ....
       For i = idxTxt To (idxTxt + 4)
          If (Not i = indexTxt) and (not val(Text1(i).Text)=0) Then
              If Text1(i).Text = Text1(indexTxt) Then
                CheckNumber = True
                Exit For
             End If
          End If
       Next
    ....
    End Function
    
    Private Sub Text1_Validate(Index As Integer, Cancel As Boolean)
       'attenzione, la proprietà Maxlength delle textBox relative alle estazione, deve essere impostata a 2 
       If Len(Trim(Text1(Index).Text)) > 0 Then
          If Len(Text1(Index).Text) = 1 Then
              Text1(Index).Text = "0" & Text1(Index).Text
          End If
    
          If Val(Text1(Index).Text) < 0 Or Val(Text1(Index).Text) > 90 Then
              MsgBox "L'estrazione deve essere compresa tra 0 e 90"
             Text1(Index).Text = ""
             Cancel = True
          ElseIf CheckNumber(Index) Then
             MsgBox "Il numero [" & Text1(Index) & "] è già inserito!"
             Text1(Index).Text = ""
             Cancel = True
          End If
       End If
    End Sub
    Le modifiche sono quelle in rosso... controlla magari meglio.. non le ho testate..
    Jupy

  9. #9
    Ciao Jupy64 ,ho provato le modifiche funziona ma mi crea un piccolo problema quando inserisco lo zero e passa alla tex1box successiva lo raddoppia quindi diventano 2 zero ,e se inserisco un numeretto esempio 1 o 3 o 5 mi aggiunge sempre lo zero davanti,

    secondo problema dopo memorizzato se faccio la ricerca avanti e indietro mi aggiunge sempre uno zero dove ci sono i numeretti mi sembra strano eppure ho bloccato le tex1box infatti se provo a digitare qualcosa non accade nulla.

    terzo problema prima la ricerca avanti e indietro era molto più veloce ,secondo me il controllo del TAB e dei numeri dovrebbe funzionare solo quando si inserisce una nuova estrazione o modifica ,a me sembra che continuii il controllo anche quando si visiona per questo mi rallenta e mi aggiunge lo zero davanti ai numeretti compreso lo zero.

    ho dato uno sguardo al database quando memorizza è tutto ok ed integro,è da risolvere solo il terzo problema ok.grazie
    Alarico_Re

  10. #10
    Utente di HTML.it L'avatar di Jupy64
    Registrato dal
    Sep 2004
    Messaggi
    1,151
    codice:
    Private Sub Text1_Change(Index As Integer)
       If stato="modifica" then
           If Len(Text1(Index)) = 2 Then
             'attenzione, la proprietà TabIndex delle textBox relative alle estrazioni,devono essere sequenziali dalla prima all'ultima 
             SendKeys "{TAB}", True
          End If
       end if
    End Sub
    
    Private Sub Text1_Validate(Index As Integer, Cancel As Boolean)
       'attenzione, la proprietà Maxlength delle textBox relative alle estazione, deve essere impostata a 2 
       If stato="modifica" then
          If Len(Trim(Text1(Index).Text)) > 0 Then
             If Len(Text1(Index).Text) = 1 Then
                Text1(Index).Text = "0" & Text1(Index).Text
             End If 
             If Val(Text1(Index).Text) < 0 Or Val(Text1(Index).Text) > 90 Then
                MsgBox "L'estrazione deve essere compresa tra 0 e 90"
                Text1(Index).Text = ""
                Cancel = True
             ElseIf CheckNumber(Index) Then
                MsgBox "Il numero [" & Text1(Index) & "] è già inserito!"
                Text1(Index).Text = ""
                Cancel = True
             End If
          End If
       end if
    End Sub
    Allora, se non vuoi che si anteponga lo zero, devi togliere la parte in grassetto.

    Se vuoi usare sempre le stesse TextBox sia per visualizzare che per inserire/modificare allora devi fare le modifiche in rosso.
    In pratica quanto sei in visualizzazione imposti la variabile stato="visualizza" mentre quando sei in insirimento/modifica imposti stato="modifica"
    Jupy

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.