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
    martedì 15 luglio 2025
    Bari
    60
    18
    12
    57
    28
    Cagliari
    20
    26
    81
    55
    18
    Firenze
    28
    59
    46
    83
    81
    Genova
    32
    57
    09
    41
    17
    Milano
    58
    31
    49
    38
    63
    Napoli
    36
    58
    57
    45
    59
    Palermo
    03
    05
    48
    86
    62
    Roma
    47
    18
    01
    23
    79
    Torino
    56
    34
    49
    89
    90
    Venezia
    46
    44
    52
    82
    78
    Nazionale
    16
    36
    15
    13
    60
    Estrazione Simbolotto
    Nazionale
    27
    09
    44
    18
    11

Ultimi Messaggi

Indietro
Alto