Novità

Mente da programmatore

una cosa molto utile che è possibile fare è la creazione di controlli personalizzati , questi possono essere osviluppati a parte e inseriti dai riferimenti , o possono essere presenti direttamente nel progetto.
Gli usercontrol sono come dice la parola deicontrolli utente che svolgono delle specifiche operazioni non previste da altri controlli disponibili nel framework. Possono essere la combinazione di piu controlli con una loro logica che ne consente un uso particolare richiesto dalle circostanze di quel progetto.

Usare un controllo personalizzato ha indubbiamente dei vantaggi perche possiamo incapsulare li tutte le procedure specifiche per farlo
funzionare ed esporre all'esterno cioè alla nostra applicazione che lo usa le sue proprietà e possiamo reagire ai suo eventii proprio come nei controlli normali.
Negli user control siamo noi a implementare le proprietà gli eventi e le sue procedure interne, possiamo decidere se ereditare da controlli gia esitenti

per esempio in spaziometria è presente questo controllo che serve per selezionare un range nell'archivio estrazioni.

1636029791373.png

per inserire un controllo user control e programmarlo da 0 c'è l'apposita voce del menu , oppure si puo importare un controllo di cui si ha il file sorgente facendoaggiungi file esistente.
nel nostro progetto potremo usare questo che ho predisposto e di cui metto il link con un form che lo usa

1636029759753.png

il controllo è molto semplice e dispone solo di 3 proprieta e di alcuni eventi

EstrazioniTotali
Inizio
Fine

il tuocompito dopo averlo provato nel form di esempio è inserirlo nel tuo progetto (crea una cartella apposta usertcontrol e una sottocartella per questo qui)

nel form mdi metti un pannelllo con dock = bottom
su quel pannello metti il controllo range
nella procedura di inizializzazione imposta il valore delle estrazioni totali usando la proprieta della classe archivio
ora dovrai predisporre 2 nuovi valorida gestire nel file ini , e cioe inizio e fine , alla chiusura del form mdi dvi salvare i valori presi dalle proprieta inizio e fine del controllo , e all'apertura ovvero nella procedura inizializza devi impostarle leggendole dal file di configurazione

ecco la link perscaricare il progetto

per aggiungerlo al tuo devi fare aggiungi file esistente e selezioni ctlRangeEstrazioni.vb
dopo di che subito avvii il progetto cosi la user control si compila senno non si puo usare
stoppi il progetto e vedrai la tua usercontrol nella casella degli strumenti quindi ora la puoi usare e inserire nel form mdi come ti ho suggerito.


1636030853948.png

 
Ahahaha eccolo qui :ROFLMAO:

 
una cosa molto utile che è possibile fare è la creazione di controlli personalizzati , questi possono essere osviluppati a parte e inseriti dai riferimenti , o possono essere presenti direttamente nel progetto.
Gli usercontrol sono come dice la parola deicontrolli utente che svolgono delle specifiche operazioni non previste da altri controlli disponibili nel framework. Possono essere la combinazione di piu controlli con una loro logica che ne consente un uso particolare richiesto dalle circostanze di quel progetto.

Usare un controllo personalizzato ha indubbiamente dei vantaggi perche possiamo incapsulare li tutte le procedure specifiche per farlo
funzionare ed esporre all'esterno cioè alla nostra applicazione che lo usa le sue proprietà e possiamo reagire ai suo eventii proprio come nei controlli normali.
Negli user control siamo noi a implementare le proprietà gli eventi e le sue procedure interne, possiamo decidere se ereditare da controlli gia esitenti

per esempio in spaziometria è presente questo controllo che serve per selezionare un range nell'archivio estrazioni.

Vedi l'allegato 2224431

per inserire un controllo user control e programmarlo da 0 c'è l'apposita voce del menu , oppure si puo importare un controllo di cui si ha il file sorgente facendoaggiungi file esistente.
nel nostro progetto potremo usare questo che ho predisposto e di cui metto il link con un form che lo usa

Vedi l'allegato 2224430

il controllo è molto semplice e dispone solo di 3 proprieta e di alcuni eventi

EstrazioniTotali
Inizio
Fine

il tuocompito dopo averlo provato nel form di esempio è inserirlo nel tuo progetto (crea una cartella apposta usertcontrol e una sottocartella per questo qui)

nel form mdi metti un pannelllo con dock = bottom
su quel pannello metti il controllo range
nella procedura di inizializzazione imposta il valore delle estrazioni totali usando la proprieta della classe archivio
ora dovrai predisporre 2 nuovi valorida gestire nel file ini , e cioe inizio e fine , alla chiusura del form mdi dvi salvare i valori presi dalle proprieta inizio e fine del controllo , e all'apertura ovvero nella procedura inizializza devi impostarle leggendole dal file di configurazione

ecco la link perscaricare il progetto

per aggiungerlo al tuo devi fare aggiungi file esistente e selezioni ctlRangeEstrazioni.vb
dopo di che subito avvii il progetto cosi la user control si compila senno non si puo usare
stoppi il progetto e vedrai la tua usercontrol nella casella degli strumenti quindi ora la puoi usare e inserire nel form mdi come ti ho suggerito.


Vedi l'allegato 2224432

Bene (y)
 
Nel frattempo inizio in modo molto soft. Poiché vi è la presenza dell'evento textchanged, dichiaro disable il button salva al load del form, ponendolo enable all'interno dell'evento textchanged. Mi creo una procedura di comodo chiamata "AzzeraCampi" che chiamerò alla pressione del tasto "Nuova" e che permetterà simultaneamente di abilitare il tasto Salva. :

Codice:
Public Class frmBroserEstr
    Private Sub frmBroserEstr_Load(sender As Object, e As EventArgs) Handles Me.Load
        LoadCampi()
        ImpostaLimitiScrollBar()
        ButtonSalva.Enabled = False
    End Sub
    Sub LoadCampi()

        Dim lblRuota As Label
        Dim nX As Integer, nY As Integer
        Dim nHTxt As Integer = 15, nWTxt As Integer = 25
        Dim nHLbl As Integer = 15, nWLbl As Integer = 60
        Dim nLeft As Integer = 10, nTop As Integer = 10
        Dim i As Integer

        ReDim aTxtNumeri(55)

        nX = nLeft
        nY = nTop

        For r As Integer = 1 To 11

            lblRuota = New Label
            With lblRuota
                .AutoSize = False
                .Left = nX
                .Top = nY
                .Width = nWLbl
                .Height = nHLbl
                .TextAlign = ContentAlignment.MiddleCenter
                .Parent = Panel1
                .Visible = True
                .Text = NomiRuote(r).Nome
            End With

            nX = nX + nWLbl

            For e As Integer = 1 To 5
                i += 1
                aTxtNumeri(i) = New MaskedTextBox
                With aTxtNumeri(i)
                    .Left = nX
                    .Top = nY
                    .Width = nWTxt
                    .Height = nHTxt
                    .MaxLength = 2
                    .Parent = Panel1
                    .Mask = "99"
                    .PromptChar = " "
                    AddHandler aTxtNumeri(i).TextChanged, AddressOf Gestione_TextChanged

                    .Visible = True
                End With

                nX += nWTxt + 2

            Next
            nY = nY + aTxtNumeri(1).Height + 1
            nX = nLeft
        Next
    End Sub
    Sub ImpostaLimitiScrollBar()
        HScrollBar1.Minimum = 1
        HScrollBar1.Maximum = cArchivio.QuantitaEstrazioni
        HScrollBar1.Value = HScrollBar1.Maximum
    End Sub

    Private Sub Gestione_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs)
        ButtonSalva.Enabled = True
    End Sub

    Private Sub HScrollBar1_ValueChanged(sender As Object, e As EventArgs) Handles HScrollBar1.ValueChanged
        Dim str As StrEstrazione
        Dim i As Integer
        If cArchivio.GetEstrazione(HScrollBar1.Value, str) Then
            LabEstrTot.Text = HScrollBar1.Value
            TextData.Text = cArchivio.GetDataEstrazione(HScrollBar1.Value, str)
            TextNum.Text = cArchivio.GetNumeroEstrazione(HScrollBar1.Value, str)
            For r As Integer = 1 To 11
                For es As Integer = 1 To 5
                    i += 1
                    aTxtNumeri(i).Text = str.Ruote(r).Estratto(es)
                Next
            Next
        End If
    End Sub

    Private Sub ButtonNuova_Click(sender As Object, e As EventArgs) Handles ButtonNuova.Click
        AzzeraCampi()
    End Sub

    Private Sub ButtonChiudi_Click(sender As Object, e As EventArgs) Handles ButtonChiudi.Click

    End Sub

    Private Sub ButtonSalva_Click(sender As Object, e As EventArgs) Handles ButtonSalva.Click

    End Sub
    
    Private Sub AzzeraCampi()
        Dim i As Integer
        For r As Integer = 1 To 11
            For es As Integer = 1 To 5
                i += 1
                aTxtNumeri(i).Text = " "
            Next
        Next
    End Sub
End Class
 
attento che quando vai a leggere le estrzioni e valorizzare i campi l'evento si scatena lo stesso.
Il tasto salva lo devi abilitare solo se è l'utente ad aver cambiato i dati nella finestra oppure se sei nello stato di nuova estrazione
 
ok ho gestito il tasto nuovo ed i contenuti informativi della form. Però ho difficoltà nella rilevazione delle modifiche del testo della singola casella.

Codice:
Public Class frmBroserEstr
    Private TextChange As Boolean
    Private Sub frmBroserEstr_Load(sender As Object, e As EventArgs) Handles Me.Load
        LoadCampi()
        ImpostaLimitiScrollBar()
        ButtonSalva.Enabled = False
        TextChange = False
    End Sub
    Sub LoadCampi()

        Dim lblRuota As Label
        Dim nX As Integer, nY As Integer
        Dim nHTxt As Integer = 15, nWTxt As Integer = 25
        Dim nHLbl As Integer = 15, nWLbl As Integer = 60
        Dim nLeft As Integer = 10, nTop As Integer = 10
        Dim i As Integer

        ReDim aTxtNumeri(55)

        nX = nLeft
        nY = nTop

        For r As Integer = 1 To 11

            lblRuota = New Label
            With lblRuota
                .AutoSize = False
                .Left = nX
                .Top = nY
                .Width = nWLbl
                .Height = nHLbl
                .TextAlign = ContentAlignment.MiddleCenter
                .Parent = Panel1
                .Visible = True
                .Text = NomiRuote(r).Nome
            End With

            nX = nX + nWLbl

            For e As Integer = 1 To 5
                i += 1
                aTxtNumeri(i) = New MaskedTextBox
                With aTxtNumeri(i)
                    .Left = nX
                    .Top = nY
                    .Width = nWTxt
                    .Height = nHTxt
                    .MaxLength = 2
                    .Parent = Panel1
                    .Mask = "99"
                    .PromptChar = " "
                    AddHandler aTxtNumeri(i).TextChanged, AddressOf Gestione_TextChanged
                    .Visible = True
                End With

                nX += nWTxt + 2

            Next
            nY = nY + aTxtNumeri(1).Height + 1
            nX = nLeft
        Next
    End Sub
    Sub ImpostaLimitiScrollBar()
        HScrollBar1.Minimum = 1
        HScrollBar1.Maximum = cArchivio.QuantitaEstrazioni
        HScrollBar1.Value = HScrollBar1.Maximum
    End Sub

    Private Sub Gestione_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs)

    End Sub

    Private Sub HScrollBar1_ValueChanged(sender As Object, e As EventArgs) Handles HScrollBar1.ValueChanged
        AlimentaContenutiForm()
    End Sub
    Private Sub ButtonNuova_Click(sender As Object, e As EventArgs) Handles ButtonNuova.Click

        If ButtonNuova.Text = "Nuova" Then
            TextChange = True
            ButtonSalva.Enabled = True
            ButtonNuova.Text = "Annulla"
            ImpostaLimitiScrollBar()
            AzzeraCampi()
            AggiornaLimitiInfoEstr()
        Else
            TextChange = False
            ButtonSalva.Enabled = False
            ButtonNuova.Text = "Nuova"
            ImpostaLimitiScrollBar()
            AlimentaContenutiForm()
        End If

    End Sub

    Private Sub ButtonChiudi_Click(sender As Object, e As EventArgs) Handles ButtonChiudi.Click
        If TextChange = False Then
            Me.Close()
        Else
            Dim RispostaUtente = MessageBox.Show("Modifiche non salvate, vuoi uscire?", "Rilevata modifica", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
            If RispostaUtente = DialogResult.Yes Then
                Me.Close()
            End If
        End If

    End Sub

    Private Sub ButtonSalva_Click(sender As Object, e As EventArgs) Handles ButtonSalva.Click

    End Sub
    Private Sub AzzeraCampi()
        Dim i As Integer
        For r As Integer = 1 To 11
            For es As Integer = 1 To 5
                i += 1
                aTxtNumeri(i).Text = ""
            Next
        Next
    End Sub
    Private Sub AggiornaLimitiInfoEstr()
        Dim str As New StrEstrazione
        Dim EstrTotTmp As Integer = cArchivio.QuantitaEstrazioni
        Dim NumeroEstrTmp As Integer = cArchivio.GetNumeroEstrazione(cArchivio.QuantitaEstrazioni, str)
        Dim DataEstrTmp As String = ""
        TextNum.Text = NumeroEstrTmp + 1
        LabEstrTot.Text = EstrTotTmp + 1
        TextData.Text = DataEstrTmp
    End Sub

    Private Sub AlimentaContenutiForm()
        Dim str As StrEstrazione
        Dim i As Integer
        If cArchivio.GetEstrazione(HScrollBar1.Value, str) Then
            LabEstrTot.Text = HScrollBar1.Value
            TextData.Text = cArchivio.GetDataEstrazione(HScrollBar1.Value, str)
            TextNum.Text = cArchivio.GetNumeroEstrazione(HScrollBar1.Value, str)
            For r As Integer = 1 To 11
                For es As Integer = 1 To 5
                    i += 1
                    aTxtNumeri(i).Text = str.Ruote(r).Estratto(es)
                Next
            Next
        End If
    End Sub

End Class
 
quando l'evento scatta vuol dire che il testo nelle celle è cambiato in quella circostanza devi abilitare i ltasto salva , ma solo se è l'utente ad aver scritto dentro i campi.
Quindi prima di abilitare il tasto salva andrai a testare una variabile booleana che dichiarerai globale al form tale variabile per essere espliciti la chiamaerai bNonGestireeventoSalva , la imposterai a true prima di caricare l'estrazione e la pulirai al termine
dopo di che al tasto salva dovrai alimentare una struttura estrazione con i dati della finestra , testare se è valida , se si scriverla nel file
 
Ciao ho scaricato il file
ho provato ad aprire con visual studio express 2015, ma mi dice che la mia versione trial di 30 giorni è finita.
ma express non vuol dire che è free ?
forse devo scaricare una versione piu recente , se si quale mi consigliate che sia gratuita ed utilizzabile?
grazie e scusate .
a mi da anche messaggio che piu progetti non sono richiamati correttamente.
Luigi qui piu che dare una mano , posso solo cercare di caricare il progetto e studiarlo. :)
e non è poca roba. non trovo neanche il mio vecchio libro,
 
ciao Ho visto che ora c'è visual studio comunity 2019 ed è free
è una versione per studio e non commerciabile? è per prova o resta gratuita anche dopo 30 giorni?
grazie e scusate per la mia immensa ignoranza :(
 
ciao Legend anche la versione community 2019 dovrebbe andare bene scarica quella o c'è il suggerimento dell'amico sopra..
 
Ok scarico la versione community che 2019
.
La professional non mi serve.
Altra domanda stupida. Devo disinstallare la 2015?
Se si suggerimenti su come fare?
Grazie:)
 
Installato anche io dal sito microsoft versione community 2019 free 🙂
Provo a seguirvi... attivamente... 😬🙄🥴 e non solo dal divano... 😄 👋🧑‍🍳😃

A parte l'entusiasmo iniziale per aver scaricato e installato il programma sono già indeciso se disinstallarlo subito o aspettare qualche giorno... :unsure::ROFLMAO:

Dire che non ci capisco nulla è un eufemismo... :eek::LOL:

Meno di zero... 🥶😵🥴😬

Ad es... che file si apre all'inizio? 🙄o_O:LOL: Quello che visualizzavo nella prima cartella come icona violetta LottoProjectLB con estensione .sln mi ha dato subito errore 😱😂

Comunque è stata una bella esperienza... 👀👁️🤪

Breve... ma intensa... 😂
 
quando l'evento scatta vuol dire che il testo nelle celle è cambiato in quella circostanza devi abilitare i ltasto salva , ma solo se è l'utente ad aver scritto dentro i campi.
Quindi prima di abilitare il tasto salva andrai a testare una variabile booleana che dichiarerai globale al form tale variabile per essere espliciti la chiamaerai bNonGestireeventoSalva , la imposterai a true prima di caricare l'estrazione e la pulirai al termine
dopo di che al tasto salva dovrai alimentare una struttura estrazione con i dati della finestra , testare se è valida , se si scriverla nel file
Problema abilitazione tasto salva risolto. Per quanto rigurda il click del button salva se ho capito bene dovrebbe essere cosi giusto?

Codice:
   Private Sub ButtonSalva_Click(sender As Object, e As EventArgs) Handles ButtonSalva.Click
        Dim strEst As StrEstrazione
        Dim i As Integer
        strEst.identifier = Convert.ToInt32(LabEstrTot.Text)
        strEst.Data.Numero = Convert.ToInt32(TextNum.Text)
        strEst.Data.Data = Convert.ToDateTime(TextData.Text)
        For r As Integer = 1 To 11
            For es As Integer = 1 To 5
                i += 1
                strEst.Ruote(r).Estratto(es) = aTxtNumeri(i).Text
            Next
        Next
        If IsEstrazioneValida(strEst) Then
            cArchivio.ScriviEstrazione(LabEstrTot.Text, strEst)
        End If
    End Sub
 
A parte l'entusiasmo iniziale per aver scaricato e installato il programma sono già indeciso se disinstallarlo subito o aspettare qualche giorno... :unsure::ROFLMAO:

Dire che non ci capisco nulla è un eufemismo... :eek::LOL:

Meno di zero... 🥶😵🥴😬

Ad es... che file si apre all'inizio? 🙄o_O:LOL: Quello che visualizzavo nella prima cartella come icona violetta LottoProjectLB con estensione .sln mi ha dato subito errore 😱😂

Comunque è stata una bella esperienza... 👀👁️🤪

Breve... ma intensa... 😂
diamine lotto_tom c'è un .exe ben visibile ,queste sviste da parte tua non sono ammesse... ;)
 

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