Novità

Mente da programmatore

per edoardo , la funzione implementata da questa form io la lascierei cosi senza appesantirla di funzionalità diverse per non complicare le cose.
Direi invece di fare un form apposta dove potremo gestire le varie analisi sulle estrazioni , che ne so somme estratti , differnze , evidenzia gemellli , cifre , cadenze .. tutte varie cose che è meglio mettere in un form a parte senza appesantire la funzione di edit/new delle estrazioni.
Pero a aspetta a procedere , quando avrai consolidato le cose dette fin ora procediamo su un 'altra cosa , di tu quando sei pronto
Sto avendo difficolta nell'implementazione del form scegli range a seguito del click sulla X nella barra ma non riesco a capire perchè non mi viene passato il valore e perchè non riesco a trascriverlo... posto il codice con commento in cui restituisce errore.

Codice:
Public Class frmSelLimRange
    Private Sub frmSelLimRange_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Init()
    End Sub
    Sub Init()
        Dim frm As New frmSchermataPrincipale
        ScrollBarInizio.Minimum = 1
        ScrollBarInizio.Maximum = ConvertToInt(cArchivio.QuantitaEstrazioni)

        ScrollBarFine.Minimum = 1
        ScrollBarFine.Maximum = ConvertToInt(cArchivio.QuantitaEstrazioni)


        ScrollBarInizio.Value = frm.CtlRangeEstrazioni1.Inizio 'QUI MI DA VALORE ZERO
        ScrollBarFine.Value = frm.CtlRangeEstrazioni1.Fine 'QUI MI DA VALORE ZERO

        LabEstrS1.Text = cArchivio.GetInfoEstrazione(ScrollBarInizio.Value)
        LabEstrS2.Text = cArchivio.GetInfoEstrazione(ScrollBarFine.Value)

    End Sub

    Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
        Me.Close()
    End Sub

    Sub GestioneTotali()
        Dim nTotali As Integer
        nTotali = ScrollBarFine.Value - (ScrollBarInizio.Value - 1)
        LabEstrTot.Text = nTotali

    End Sub
    Sub GestioneRangeInizio()
        If ScrollBarInizio.Minimum > 0 And ScrollBarFine.Minimum > 0 Then
            If ScrollBarInizio.Value <= ScrollBarFine.Value Then
                LabEstrS1.Text = cArchivio.GetInfoEstrazione(ScrollBarInizio.Value)
                GestioneTotali()
            Else
                ScrollBarInizio.Value = ScrollBarFine.Value

            End If
        End If
    End Sub
    Sub GestioneRangeFine()
        Dim nLen As Integer
        If ScrollBarInizio.Minimum > 0 And ScrollBarFine.Minimum > 0 Then
            If ScrollBarFine.Value >= ScrollBarInizio.Value Then
                LabEstrS2.Text = cArchivio.GetInfoEstrazione(ScrollBarFine.Value)
                GestioneTotali()
            Else
                ScrollBarFine.Value = ScrollBarInizio.Value
            End If
        End If

    End Sub


    Private Sub ScrollBarFine_ValueChanged(sender As Object, e As EventArgs) Handles ScrollBarFine.ValueChanged
        GestioneRangeFine()
    End Sub

    Private Sub ScrollBarInizio_ValueChanged(sender As Object, e As EventArgs) Handles ScrollBarInizio.ValueChanged
        GestioneRangeInizio()
    End Sub

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim frm As New frmSchermataPrincipale

        If ScrollBarInizio.Value <= ScrollBarFine.Value Then
            frm.CtlRangeEstrazioni1.Inizio = ScrollBarInizio.Value
            frm.CtlRangeEstrazioni1.Fine = ScrollBarFine.Value
            Me.Close()
        End If

    End Sub

End Class
 
ciao Edoardo , colpa mia che non ti ho spiegato bene.
La form frmScegliRange deve essere mostrta in modo modale , ovvero una volta mostrata finche non viene chiusa non si puo cliccare su altro.

questo il codice da inserire all'evento appropriato del controllo range

Codice:
     Dim frm As New frmScegliRange
        frm.ShowDialog()
        If frm.Tag = "ok" Then
            Me.CtlRangeEstrazioni1.Inizio = frm.HScrollBar1.Value
            Me.CtlRangeEstrazioni1.Fine = frm.HScrollBar2.Value

        End If
        frm.Close()
        frm.Dispose()


nel pulsante ok /conferma delal form frmScegliRange avrai l'accortezza di valorizzare la proprietà tag del form con il valore "ok" , poi nascondi la form ,attenzione nascondi non chiudi. Vuol dire che il focus ritorna sulla finestra principale in quanto quella modale non si vede piu pur essendo ancora caricata.

A quel punto tu puoi leggere le proprieta delel scroll bar, ma lo farai solo se nel tag del form c'è scritto "ok" perche l'utente potrebbe anche fare annulla e in quel caso avrai avuto l'accortezza di non scrivere niente nel tag

ecco i lcodice dei due pulasanti conferma e annulla della form frmSelRange
Codice:
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Me.Tag = "ok"
        Me.Hide()
    End Sub

    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        Me.Tag = ""
        Me.Hide()
    End Sub


quando viene eseguita la riga frm.ShowDialog il controll opassa alla nuova finestra e il codice successivo verrà eseguito solo quando questa non sarà piu visibile.
Quindi tu in base alla scelta dell'utente fai quell oche devi fare e poi la scarichi , come da codice che ti ho mostrato
 
legend per testare la tua funzione fai cosi
apri un nuovo progetto come da schermate ,

1636190680056.png

1636190634964.png




ti si creera un nuovo progetto.

fai doppio click su

1636190776351.png

ti si apre la form in modalita progettazione

inserisci un pulsante , un campo testo e una lista dalla toolbox , per inserire i controlli sul form o li trascini o ci fai doppio click sopra e lui li mette sul foorm ,poi con il mouse li posizioni

1636190923789.png

scegli buttom , textbox , listbox

ti deve venire cosi

1636190994626.png

poi dallesplora soluzione clicchi col destro e fai aggiungi modulo

1636191042891.png


nel modulo scrivi le due funzioni che ti ho detto


appena fatto poi ti spiego come usare il form con i pulsanti e la lista
 
Ecco la nuova versione con icone aggiunte e form di selezione range implementato

 
benissimo . , ora che abbiamo parlato degli user control posso chiederti di realizzarne uno molto semplice che servirà per selezionare le ruote
e lo dovrai affiancare una volta creato a quell odel range.

per crearlo dovrai aggiungere una nuova user control , fare a runtime il caricamento di 11 checkbox con la proprieta Appearance = button
alle quali attribuirai la proprietà text con il nome delel ruote.
Un esempio di come si caricano a runtime i controlli gia ce l'hai
Questa usercontrol dovra esporre due function quasi identiche per sapere quali e quante ruote ruote sono selezionate.

Codice:
function GetRuoteSelezionate (byref aRetRuote() as integer ) as integer

end function 

function GetRuoteSelezionate (byref aRetRuote() as boolean) as integer

end function
 
Ciao a tutti:)
Luigi appena caricato il modulo
ora provo a scrivere le funzioni

intanto l ho scritta in spazio ,cosi il procedimento è troppo tortuoso o potrei provare a scriverla in vb.net?
ecco il codici da eventualmente tradurre.
Codice:
Option Explicit
Sub Main
   Dim sNumString,count
   ReDim aNum(0)
   sNumString = "1;5,15.26    30 #2"
   count = StringaNumeriToArrayNumeri(sNumString,aNum)
   Scrivi count
   Scrivi StringaNumeri(aNum)
End Sub
Function StringaNumeriToArrayNumeri(sNumString,aNum)
   Dim s,e,c,k
   s = ""
   ' riscrivo la stringa con lo stesso separatore
   For c = 1 To Len(sNumString)
      e = Mid(sNumString,c,1)
      If Not IsNumeric(e) Then
         s = s & "."
      Else
         s = s & e
      End If
   Next
   '  aNum=StringaNumeriToArray(s) ' funzione di spaziometria
   ' trasferisco la stringa in un array
   ' carico solo i valori numerici
   Dim aV:aV = Split(s,".")
   k = 0
   For c = 0 To UBound(aV)
      If aV(c) <> "" Then
         k = k + 1
         ReDim Preserve aNum(k)
         aNum(k) = CInt(aV(c))
      End If
   Next
   StringaNumeriToArrayNumeri = UBound(aNum)
End Function
in pratica per semplificarmi la vita ( sono pigro) ho riscritto un separatore unico (tipo replace)
poi ho splittato la stringa e successivamente l ho caricata in aNum risolvendo il problema degli spazi

sicuramente è troppo arzigogolato cmq funzia
avevo raccolto anche tutti i separatori in un array e poi fatto il replace , ma cosi è la soluzione piu semplice che mi è venuta in mente.
in vb.net si puo fare tutto con meno funzioni?
a dopo ;)
 
ciao anche cosi Funzia
Codice:
Function StringaNumeriToArrayNumeri1(sString,aNum)
   Dim i,e,k,s
   ReDim aTemp(Len(sString))
   k=0
   For i = 1 To Len(sString)
      e = Mid(sString,i,1)
      If IsNumeric(e) Then
         s = s & e
      Else
         k = k + 1
         aTemp(k) = s
         s = ""
      End If
   Next
   ReDim Preserve aTemp(k)
   i = 0
   For e = 1 To UBound(aTemp)
      If aTemp(e) <> "" Then
      i=i+1
         aNum(i) = CInt(aTemp(e))
      End If
   Next
   StringaNumeriToArrayNumeri1 = UBound(aNum)
 
End Function
 
ciao Legend , io direi di fare in vbnet direttamente pero se ti aiuta farlo prima in script va bne per ora.

la tua funzione si puo migliorare

Codice:
Dim s,e,c,k
   s = ""
   ' riscrivo la stringa con lo stesso separatore
   For c = 1 To Len(sNumString)
      e = Mid(sNumString,c,1)
      If Not IsNumeric(e) Then
         s = s & "."
      Else
         s = s & e
      End If
   Next


invece di costruire una stringa con un carattere separatore noto devi fare in un altro modo.

Codice:
 For c = 1 To Len(sNumString)
If Not IsNumeric(e) Then

       ' qui testi se s è diverso da stringa vuota , se lo è vuol dire che è una sequenza di cifre percio con  int(s) ne ottieni il valore
      ' ottenuto il valore lo accodi in una nuova posizione dell'array e svuoti s con s= ""
         
      Else
         s = s & e
      End If
next

alal fine del ciclo ti troverai con un s che contiene un valore quindi devi gestire pure quello come sopra
 
ciao allora ho usato la funzione al post 188 che con i tuoi suggerimenti del 189 :)
ho ottenuto una funzione scritta meglio ed ho eliminato un ciclo for e un aTemp
eccola in spazio
Codice:
Function StringaNumeriToArrayNumeri1(sString,aNum)
   Dim i,e,k,s
   ReDim aTemp(Len(sString))
   k = 0
   For i = 1 To Len(sString)
      e = Mid(sString,i,1)
      If IsNumeric(e) Then
         s = s & e
      Else
         If s <> "" Then
            k = k + 1
            aNum(k) = Int(s)
            s = ""
         End If
      End If
   Next
   k=k+1
   ReDim Preserve aNum(k)
   StringaNumeriToArrayNumeri1 =k
End Function

:( avrei dovuto pensarci da solo a valutare la stringa vuota nel primo ciclo
 
ora provo in vb.net
non trovo neanche il libro . non ricordo neanche come si dichiarano le variabili :(
forse ce la fo per quando riscrivete spaziometria 2.0
 
ciao cosi nel debug non da errori ma non so se array aNum cosi va
Codice:
    Function StringaNumeriToArrayNumeri(sStringanumeri As String, ByRef aNum As Integer) As Integer


        Dim k As Integer
        Dim i As Integer
        Dim s As Integer
       

        For i = 1 To Len(sStringanumeri)
            Dim e As String = sStringanumeri.Substring((i), (1))
            If IsNumeric(e) Then
                s = s & e
            Else
                If s <> "" Then
                    k += 1
                    aNum = (s)
                    s = ""
                End If
            End If


        Next


        Return k

    End Function
bene
 
ciao legend in tutti i casi devi coniderare che uscito dal ciclo la vartiabile s puo contenere ancora un numero , non te lo scordare.
Per la funzione che ritorna boolean è uguale , prima del ciclo ridmensioni l'array a 90 posizioni
durante il ciclo alla posizione data dal numero metti true e conti un nuovo numero inserito.
per il vbnet le stringhe partono da 0 non da 1.. attenzione
 
ciao Legend , scarica l'allegato e rinominalo .rar poi scompattalo è l'esempio in vb net dimmi se sei riuscito ad aprirlo e a vederlo cosi aggiungi tu la seconda funzione vedendo come è fatta la prima
 

Allegati

Ultima estrazione Lotto

  • Estrazione del lotto
    sabato 11 gennaio 2025
    Bari
    73
    43
    01
    58
    81
    Cagliari
    69
    60
    18
    02
    10
    Firenze
    25
    32
    18
    55
    54
    Genova
    48
    05
    40
    34
    69
    Milano
    10
    07
    70
    44
    79
    Napoli
    11
    89
    01
    34
    80
    Palermo
    37
    80
    82
    44
    77
    Roma
    78
    04
    38
    39
    56
    Torino
    08
    13
    30
    27
    24
    Venezia
    56
    75
    36
    18
    70
    Nazionale
    63
    83
    19
    31
    80
    Estrazione Simbolotto
    Bari
    35
    34
    12
    23
    20
Indietro
Alto