Novità

Mente da programmatore

bene bene , mica hai finito :-)= ora devi inserire nella form seleziona numeri una combobox che alimenterrai con varie voci , decine , cadenze , gemelli , e compagnia bella , inoltre metterai un campo testo dove si puo scrivere a mano.
inutile dire che quando si clicca su una voce della combo si devono selezionare i numeri appropriati sul controllo , per farlo c'è la funzione SetValue(ByVal Num As Integer, ByVal value As Boolean) a cui si passa il numero e il valore vero falso se è selezioanto oppure no.
ti convien preimpostare una serie di array dove registri i numeri appartenenti ad un grupppo , per esempio
dim aCadenze1() as integer = {1,11,21,....}
poi fai una sub SelezionaNumeri (aN () as integer )

poi quando clicchi sulla combo passerai ad una sub (quella detta sopra) l'array giusto e quella selezionera i numeri sul controllo
 
a domani ... :) te tocca lavorà ! Mettine solo 2 o 3 di gruppi perche poi dobbiamo cambiare una cosa questo servesolo per introdurre la funzione
 
Ok ho inserito solo alcuni gruppi per vedere come funzionava il controllo. Allego immagini e codice

Senza titolo.pngSenza titolo1.png

Codice:
Public Class frmSelNumeri
    Private Sub frmSelNumeri_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        CtlSelezionaNumeri1.SetBackColorFromStringaColoriWin32(GetValoreCfg(eValoriAppConfig.SfondoColoreNumeri))
        CtlSelezionaNumeri1.SetForeColorFromStringaColoriWin32(GetValoreCfg(eValoriAppConfig.ForeColorNumeri))
        CaricaItemCombo()
    End Sub

    Private Sub ButtonOk_Click(sender As Object, e As EventArgs) Handles ButtonOk.Click
        Me.Tag = "OK"
        Me.Hide()
    End Sub

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

    Sub CaricaItemCombo()
        ComboBox1.Items.Add("Tutti")
        ComboBox1.Items.Add("Pari")
        ComboBox1.Items.Add("Dispari")
    End Sub

    Private Sub ComboBox1_SelectedValueChanged(sender As Object, e As EventArgs) Handles ComboBox1.SelectedValueChanged
        SelectedComboItem()
    End Sub

    Private Sub ButtonPulisci_Click(sender As Object, e As EventArgs) Handles ButtonPulisci.Click
        For k = 1 To 90
            CtlSelezionaNumeri1.SetValue(k, 0)            
        Next
        TextBox1.Text = ""
    End Sub
    Sub SelectedComboItem()
        Dim i As Integer
        Dim Pari() As Integer = {0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90}
        Dim Dispari() As Integer = {0, 1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41, 43, 45, 47, 49, 51, 53, 55, 57, 59, 61, 63, 65, 67, 69, 71, 73, 75, 77, 79, 81, 83, 85, 87, 89}
        If ComboBox1.SelectedItem = "Tutti" Then
            For k = 1 To 90
                i += 1
                CtlSelezionaNumeri1.SetValue(k, i)
            Next
        ElseIf ComboBox1.SelectedItem = "Pari" Then
            For k = 1 To UBound(Pari)
                i += 1
                CtlSelezionaNumeri1.SetValue(Pari(k), i)
            Next
        ElseIf ComboBox1.SelectedItem = "Dispari" Then
            For k = 1 To UBound(Dispari)
                i += 1
                CtlSelezionaNumeri1.SetValue(Dispari(k), i)
            Next
        End If
        TextBox1.Text = CtlSelezionaNumeri1.GetStringaNumeri
    End Sub
End Class

Inoltre mi sono permesso di modificare una cosa nel controllo utente ctlSelezionaNumeri. Nella function GetStringaNumeri oltre ad eliminare l'ultimo carattere eliminava anche l'ultima cifra dell'ultimo numero in quanto l'istruzione return della substring riportava

Codice:
 Return s.Substring(0, s.Length - 2)

L'ho semplicemente modificata in

Codice:
 Return s.Substring(0, s.Length - 1)
 
ottimo , bravo ,ricordati che devi pure impostare le proprieta del controllo per quanto riguarda i colori del numero selezionato.
veniamo a noi la mia idea è di leggere le formazioni da selezionare da file anziche metterle fisse nel programma.
Inoltrre visto che in dotnet nelle combobox si possono inserire oggetti invece chesemplici stringhe , qui c'è da fare una classe che memorizza i numeri letti dal file e che poi verra utilizzata per alimentare la combo.

gia se noi inseriamo una classe come questa siamo apposto. Questa semplice classe io gia ce l'avevo per altre ragioni e l'ho presa cosi com'è è un oggeto che espone tre proprieta , 2 stringhe e un valore intero.
Per poter consentire di aggiungere alla combobox un elemento di questo tipo è necessario fare l'override della funzione ToString , per farla tornare quello che poi verra scritto e sarà visibile nella combobox.

per esempio questo codice inserira un oggetto nella combobox e si vedrà la dicitura prova.


Codice:
dim c = new clsItemCombo
c.Text = "prova" 
combobox1.items.add (c)

ora tu cosa devi fare er alimentare la combobox con le formazioni lette da file ? Semplicissimo
1) creare una function che ritorna il percorso dove cercare le formazioni , puo essere una sottocartelal del path del programma da chiamare "Preselezioni"

2) fare una routine che cerca i file di estenione csv presenti in quella cartella

3) per ogni file trovato istanziare un nuovo oggetto clsItemCombo ,valorizzare la proprietà text con il nome del file (senza estenssione) e la proprietà tag con il primo e unico record che deve essere presente nel file letto , quindi aprire il file leggere il record chiudere il file , si tratta del record contenente i numeri relativi alla preselezione , per esempio se il file si chiama cadenze1.csv avra la stringa composta dai numeri con cadenza 1 , nei file il carattere separatore tra i numeri è indifferente , essendo un csv t metti il ";"
Una volta istanziato l'oggetto e valorizzate le proprietà lo aggiungi alla combobox.

fai fino a qui e fammi saperese funge , poi vediamo di gestire l'evento click della combo






Codice:
Public Class clsItemCombo
    Dim mText As String
    Dim mItemData As Integer
    Dim mTag As String

    Public Property Tag() As String
        Get
            Return mTag
        End Get
        Set(ByVal value As String)
            mTag = value
        End Set
    End Property
    Public Property Text() As String
        Get
            Return mText
        End Get
        Set(ByVal value As String)
            mText = value
        End Set
    End Property
    Public Property ItemData() As Integer
        Get
            Return mItemData
        End Get
        Set(ByVal value As Integer)
            mItemData = value
        End Set
    End Property
    Public Overrides Function ToString() As String
        Return mText
    End Function

End Class
 
ho iniziato creato tre funzioni di comodo. A causa dei miei giochetti con le cartelle mi sono reso conto che se la cartella non esiste naturalmente va in errore. Cosi ho creato una function che semplicemente verifica che la cartella esista e se non c'è la crea.

Codice:
   Function GetDirArchivio() As String
        GetDirArchivio = Application.StartupPath & "Archivio\"
    End Function
    Function GetDirPreselezioni() As String
        GetDirPreselezioni = Application.StartupPath & "Preselezioni\"
    End Function
    Sub CreaFolderFileDefault(GetDirOfFile As String)
        If (Not System.IO.Directory.Exists(GetDirOfFile)) Then
            System.IO.Directory.CreateDirectory(GetDirOfFile)
        End If
    End Sub

dopo di che mi sono dedicato alla tua luigi. Fin da subito mi sono creato tre funzioni all'interno del ModFunzioni :

Codice:
    Function GetAllFileInPath(sPathFile As String) As String()
        Dim path() As String
        path = IO.Directory.GetFiles(sPathFile)
        Return path
    End Function
    Function GetAllNameFileWithoutExte(sPathFile() As String) As String()
        Dim NameFile() As String
        For k = 0 To UBound(sPathFile)
            ReDim Preserve NameFile(k)
            NameFile(k) = IO.Path.GetFileNameWithoutExtension(sPathFile(k))
        Next
        Return NameFile
    End Function
    Function GetAllnameFile(sPathfile As String) As String()
        Dim path() As String
        Dim namefile() As String
        path = GetAllFileInPath(sPathfile)
        namefile = GetAllNameFileWithoutExte(path)
        Return namefile
    End Function

La prima ottiene tutti i file nella cartella con estensione con tutta la stringa path che la contiene

es: "C:\Users\edowo\source\repos\LottoProjectLB\LottoProjectLB\bin\Debug\net5.0-windows\Preselezioni\Pari.csv"

la Seconda ottiene solo il nome del file senza estensione:

es: "Pari"

Laterza utilizza le prime due in un unica funzione restituendo un array di stringhe con i nomi senza estenzione dei file

es: "Pari,Dispari ecc..ecc."

Nel frmSelezionaNumeri nella Sub CaricaItemCombo ho richiamato la funzione getallfilename la quale mi restituisce l'array di sopra. Ciclandolo fornisco i nomi agli item delle combobox e li inserisco:

Codice:
    Sub CaricaItemCombo()
        Dim i As Integer
        Dim FileInPath() As String
        Dim cComb = New clsItemCombo
        FileInPath = GetAllnameFile(GetDirPreselezioni)
        For k = 0 To UBound(FileInPath)
            cComb.Text = FileInPath(k)
            ComboBox1.Items.Add(cComb)
        Next
    End Sub

Fin qui è giusto?
 
ho iniziato creato tre funzioni di comodo. A causa dei miei giochetti con le cartelle mi sono reso conto che se la cartella non esiste naturalmente va in errore. Cosi ho creato una function che semplicemente verifica che la cartella esista e se non c'è la crea.

Codice:
   Function GetDirArchivio() As String
        GetDirArchivio = Application.StartupPath & "Archivio\"
    End Function
    Function GetDirPreselezioni() As String
        GetDirPreselezioni = Application.StartupPath & "Preselezioni\"
    End Function
    Sub CreaFolderFileDefault(GetDirOfFile As String)
        If (Not System.IO.Directory.Exists(GetDirOfFile)) Then
            System.IO.Directory.CreateDirectory(GetDirOfFile)
        End If
    End Sub

dopo di che mi sono dedicato alla tua luigi. Fin da subito mi sono creato tre funzioni all'interno del ModFunzioni :

Codice:
    Function GetAllFileInPath(sPathFile As String) As String()
        Dim path() As String
        path = IO.Directory.GetFiles(sPathFile)
        Return path
    End Function
    Function GetAllNameFileWithoutExte(sPathFile() As String) As String()
        Dim NameFile() As String
        For k = 0 To UBound(sPathFile)
            ReDim Preserve NameFile(k)
            NameFile(k) = IO.Path.GetFileNameWithoutExtension(sPathFile(k))
        Next
        Return NameFile
    End Function
    Function GetAllnameFile(sPathfile As String) As String()
        Dim path() As String
        Dim namefile() As String
        path = GetAllFileInPath(sPathfile)
        namefile = GetAllNameFileWithoutExte(path)
        Return namefile
    End Function

La prima ottiene tutti i file nella cartella con estensione con tutta la stringa path che la contiene

es: "C:\Users\edowo\source\repos\LottoProjectLB\LottoProjectLB\bin\Debug\net5.0-windows\Preselezioni\Pari.csv"

la Seconda ottiene solo il nome del file senza estensione:

es: "Pari"

Laterza utilizza le prime due in un unica funzione restituendo un array di stringhe con i nomi senza estenzione dei file

es: "Pari,Dispari ecc..ecc."

Nel frmSelezionaNumeri nella Sub CaricaItemCombo ho richiamato la funzione getallfilename la quale mi restituisce l'array di sopra. Ciclandolo fornisco i nomi agli item delle combobox e li inserisco:

Codice:
    Sub CaricaItemCombo()
        Dim i As Integer
        Dim FileInPath() As String
        Dim cComb = New clsItemCombo
        FileInPath = GetAllnameFile(GetDirPreselezioni)
        For k = 0 To UBound(FileInPath)
            cComb.Text = FileInPath(k)
            ComboBox1.Items.Add(cComb)
        Next
    End Sub

Fin qui è giusto?

tutto giusto tranne la fine , devi fare un new per ogni file ..ed ovviamnete i lfile lo devi pure leggere per r scrivere la riga nella proprietà tag dell'oggetto
 
Quindi

Codice:
    Sub CaricaItemCombo()
        Dim i As Integer
        Dim FileInPath() As String
        FileInPath = GetAllnameFile(GetDirPreselezioni)
        For k = 0 To UBound(FileInPath)
            Dim cComb = New clsItemCombo
            cComb.Text = FileInPath(k)
            cComb.Tag = LeggiRigaCsv(GetDirPreselezioni() & FileInPath(k) & ".csv")
            ComboBox1.Items.Add(cComb)
        Next
    End Sub

Codice:
  Function LeggiRigaCsv(File As String) As String
        Dim sLine As String
        Dim str As New StreamReader(File)
        sLine = str.ReadLine
        str.Close()
        str.Dispose()
        Return sLine
    End Function
 
easatto , prova e vedi se ti carica la combo.
la dim falla sopra , la new la fai dentro al ciclo
 
Carica le combo in modo corretto :

Codice:
    Sub CaricaItemCombo()
        Dim i As Integer
        Dim FileInPath() As String
        FileInPath = GetAllnameFile(GetDirPreselezioni)
        Dim cComb As clsItemCombo
        For k = 0 To UBound(FileInPath)
            cComb = New clsItemCombo
            cComb.Text = FileInPath(k)
            cComb.Tag = LeggiRigaCsv(GetDirPreselezioni() & FileInPath(k) & ".csv")
            ComboBox1.Items.Add(cComb)
        Next
    End Sub
 
benissimo allora adesso cambia tutto :) ahah . allora c'è da fare una classe che eredita da clsItemCombo e che si chiami clsItemPreselezione e che implementa una nuova funzione
ReadTagFromFile (sFile as string )

questa funzione valorizza i ltag leggendo la riga dal file in pratica quell oche hai fatto prima.
pper riferirsi alle proprieta delal classe di base si usa MyBase.

una volta fatto quando alimenti la combo usa questo nuovo oggetto e lancia la funzione per farl oalimentare da solo.
una cosa , la funzione chelegge il file falla interna , essendo un oggetto che deve assolvere a compiti specifici non deve dipendere da funzioni esterne
 
Prima di procedere devo chiederti una cosa: quando dici "ricordati che devi pure impostare le proprieta del controllo per quanto riguarda i colori del numero selezionato." Come posso farlo? Attraverso quale proprietà?
 
ti ricordi che nel form opzioni oltre al colore dei numeri del pannello gestivi pure con due comboboxcolore dedicate i colori per la selezione ? Gia liall'evento click c'era da valorizzare le stesse proprietà che devi usare ora. Non mi ricordo se lo avevi fatto comunque le proprietà sono

BackColorSelected
ForeColorSelected
 
io ho usato questa che poi ho rimosso perchè mi azzera i colori di default. Nel controllo nella property BackcolorSelected c'è un reload dei cambi e mi azzera le impostazioni default:

Codice:
CtlSelezionaNumeri1.ForeColorSelected = Color.FromName(GetValoreCfg(eValoriAppConfig.ForeColorNumEvidenziato))
 
bravo , remma quelal chiamata pure io commetto errori non serve ricaricxare i pulsanti ad ogni modo ti bastava prima impostare questi valori e poi il colore dei numeri in quel caso credo avrebeb funzionato
 
No non va remmata in realtà è corretto. Sono io che non avevo capito l'intenzione del comando. Vanno semplicemente impostati i valori prima. Grazie e scusami se ti rompo ahaha
 
.bhe tutto sommato non era necessario ricaricare i pulsanti al cambio del colore per la selezione semmai bisognava fare uan routine che cambiava il colore a quelli gia selezionati. comunque procedi con la faccenda che ti ho detto prima
 
Quindi:

Codice:
    Sub CaricaItemCombo()
        Dim i As Integer
        Dim FileInPath() As String
        FileInPath = GetAllnameFile(GetDirPreselezioni)
        Dim cComb As clsItemPreselezione
        For k = 0 To UBound(FileInPath)
            cComb = New clsItemPreselezione
            cComb.Text = FileInPath(k)
            cComb.ReadTagFromFile(GetDirPreselezioni)
            ComboBox1.Items.Add(cComb)
        Next
    End Sub

Codice:
Imports System.IO
Public Class clsItemPreselezione
    Inherits clsItemCombo
    Function ReadTagFromFile(sFile As String)
        Dim i As Integer
        Dim FileInPath() As String
        FileInPath = GetAllnameFile(sFile)
        For k = 0 To UBound(FileInPath)
            MyBase.Tag = LeggiRigaCsv(GetDirPreselezioni() & FileInPath(k) & ".csv")
        Next
    End Function
    Private Function LeggiRigaCsv(File As String) As String
        Dim sLine As String
        Dim aV() As String
        Dim str As New StreamReader(File)
        sLine = str.ReadLine
        str.Close()
        str.Dispose()
        Return sLine
    End Function
End Class
 
andrebeb bene ma tu devi leggere solo il file che gli passi per parametro mica tutti ii file che hai trovato..
 
Codice:
Imports System.IO
Public Class clsItemPreselezione
    Inherits clsItemCombo
    Function ReadTagFromFile(sFile As String)
            MyBase.Tag = LeggiRigaCsv(sFile)
    End Function
    Private Function LeggiRigaCsv(File As String) As String
        Dim sLine As String
        Dim aV() As String
        Dim str As New StreamReader(File)
        sLine = str.ReadLine
        str.Close()
        str.Dispose()
        Return sLine
    End Function
End Class

Codice:
Sub CaricaItemCombo()
        Dim i As Integer
        Dim FileInPath() As String
        FileInPath = GetAllnameFile(GetDirPreselezioni)
        Dim cComb As clsItemPreselezione
        For k = 0 To UBound(FileInPath)
            cComb = New clsItemPreselezione
            cComb.Text = FileInPath(k)
            cComb.ReadTagFromFile(GetDirPreselezioni() & FileInPath(k) & ".csv")
            ComboBox1.Items.Add(cComb)
        Next
    End Sub
 

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