Novità

Mente da programmatore

ok , io nelle mie prove ho fatto cosi , usalo come guida per adattarl al tuo

Codice:
  Sub AlimentaLvScomposizione()

        Dim aNumeri() As Integer = Nothing
        Dim aRuote() As Boolean = Nothing
        Dim aPos() As Boolean = Nothing
        Dim nSorte As Integer
        Dim Inizio As Integer
        Dim fine As Integer
        Dim frz As New struct_formazione
        Dim nClasse As Integer = ConvertToInt(CmbClasseScomponi.Text)
        Dim sRuote As String
        Dim sPosizioni As String

        Try



            lvScomposizione.Items.Clear()


            If Me.CtlLvOrdinabile1.SelectedItems.Count Then
                Dim itmSel As ListViewItem = CtlLvOrdinabile1.SelectedItems(0)
                If GetParamFromItem(itmSel, aNumeri, aRuote, aPos, nSorte, Inizio, fine) Then
                    sRuote = RuoteBToString(aRuote)
                    sPosizioni = ArrayNumeriToString(aPos)
                    If nClasse < aNumeri.GetUpperBound(0) AndAlso nClasse >= nSorte AndAlso nClasse > 0 Then
                        Dim cSvil = New ClsSviluppo
                        Dim aCol() As Integer
                        If MessageBox.Show("Le colonne risultanti sono " & Combinazioni(aNumeri.GetUpperBound(0), nClasse) & " continuo ? ", "Errore", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = DialogResult.Yes Then
                            If cSvil.InitSviluppoIntegrale(aNumeri, nClasse) Then
                                ReDim aCol(nClasse)
                                lvScomposizione.Visible = False

                                Do While cSvil.GetCombFromSviluppo(aCol)
                                    If frz.Inizializza(aCol, aRuote, nSorte, Inizio, fine, aPos) Then
                                        If cArchivio.StatFormazione(frz) Then
                                            Dim itm As ListViewItem = lvScomposizione.Items.Add(ArrayNumeriToString(aCol))
                                            itm.SubItems.Add(sRuote)
                                            itm.SubItems.Add(frz.Sorte)
                                            itm.SubItems.Add(frz.Ritardo)
                                            itm.SubItems.Add(frz.RitardoMax)
                                            itm.SubItems.Add(frz.IncrRitMax)
                                            itm.SubItems.Add(frz.Frequenza)
                                            itm.SubItems.Add(frz.Presenze)
                                            itm.SubItems.Add(frz.Inizio)
                                            itm.SubItems.Add(frz.Fine)
                                            itm.SubItems.Add(sPosizioni)

                                            itm.Selected = True
                                            itm.EnsureVisible()
                                        End If
                                    End If

                                Loop
                                lvScomposizione.Visible = True

                            End If
                        End If

                        cSvil = Nothing
                    Else
                        If nClasse > aNumeri.GetUpperBound(0) Then
                            MessageBox.Show("Classe di scomposizione non coerente con la quantita di numeri base", "Errore", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
                        End If
                        If nClasse < nSorte Then
                            MessageBox.Show("Classe di scomposizione non coerente con la sorte cercata", "Errore", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
                        End If
                        If nClasse = 0 Then
                            MessageBox.Show("Classe di scomposizione non valida", "Errore", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
                        End If
                    End If


                End If

            End If

        Catch ex As Exception
            MessageBox.Show(ex.Message, "Errore", MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try

    End Sub
 
Fatto. Ho effettuato delle modifiche al codice in generale per renderlo "più compatto" che riporto qui di seguito:

Codice:
Imports System.Text
Imports System.Windows.Forms.DataVisualization.Charting

Public Class frmStatLung



    Sub LanciaStatistica()
        Dim frz As New struct_formazione
        Dim aNumeri() As Integer = Nothing
        Dim aRuote() As Boolean = Nothing
        Dim aPos() As Boolean = Nothing
        Dim nSorte As Integer
        Dim Inizio As Integer
        Dim fine As Integer

        GetArrayNumeriFromString(txtNumeri.Text, aNumeri)
        frmMain.CltSelRuote1.GetCheckSelezionate(aRuote)
        If Not IsNothing(cmbSorte.SelectedItem) Then
            nSorte = DirectCast(cmbSorte.SelectedItem, ClsItemCombo).ItemData

        End If
        CtlSelPosizione1.GetCheckSelezionate(aPos)

        Inizio = frmMain.CtlRangeEstrazioni1.Inizio
        fine = frmMain.CtlRangeEstrazioni1.Fine

        If frz.Inizializza(aNumeri, aRuote, nSorte, Inizio, fine, aPos) Then
            cArchivio.StatFormazione(frz)
            Dim itm As ListViewItem = LvLunghette.Items.Add(ArrayNumeriToString(aNumeri))
            itm.SubItems.Add(RuoteBToString(aRuote))
            itm.SubItems.Add(frz.Sorte)
            itm.SubItems.Add(frz.Ritardo)
            itm.SubItems.Add(frz.RitardoMax)
            itm.SubItems.Add(frz.IncrRitMax)
            itm.SubItems.Add(frz.Frequenza)
            itm.SubItems.Add(frz.Presenze)
            itm.SubItems.Add(frz.Inizio)
            itm.SubItems.Add(frz.Fine)
            itm.SubItems.Add(ArrayNumeriToString(frz.aPosizioni))


        End If
    End Sub
    Sub addcolumns()
        LvLunghette.View = View.Details
        LvLunghette.Columns.Add("Numeri")
        LvLunghette.Columns(0).Width = 300
        LvLunghette.Columns.Add("Ruote")
        LvLunghette.Columns(1).Width = 150
        LvLunghette.Columns.Add("Sorte")
        LvLunghette.Columns(2).Width = 50
        LvLunghette.Columns.Add("Ritardo")
        LvLunghette.Columns(3).Width = 80
        LvLunghette.Columns.Add("RitardoMax")
        LvLunghette.Columns(4).Width = 80
        LvLunghette.Columns.Add("IncrementoRitardoMax")
        LvLunghette.Columns(5).Width = 150
        LvLunghette.Columns.Add("Frequenza")
        LvLunghette.Columns(6).Width = 80
        LvLunghette.Columns.Add("Presenze")
        LvLunghette.Columns(7).Width = 80
        LvLunghette.Columns.Add("Inizio")
        LvLunghette.Columns(8).Width = 80
        LvLunghette.Columns.Add("Fine")
        LvLunghette.Columns(9).Width = 80
        LvLunghette.Columns.Add("Posizioni")
        LvLunghette.Columns(10).Width = 100



        LvUscite.View = View.Details
        LvUscite.Columns.Add("IdEstr")
        LvUscite.Columns(0).Width = 100
        LvUscite.Columns.Add("Data")
        LvUscite.Columns(1).Width = 100
        LvUscite.Columns.Add("Estratti")
        LvUscite.Columns(2).Width = 100
        LvUscite.Columns.Add("Ritardo")
        LvUscite.Columns(3).Width = 80
        LvUscite.Columns.Add("RitardoMax")
        LvUscite.Columns(4).Width = 80
        LvUscite.Columns.Add("Presenze")
        LvUscite.Columns(5).Width = 80
        LvUscite.Columns.Add("Frequenza")
        LvUscite.Columns(6).Width = 80
        LvUscite.Columns.Add("IncrRitMax")
        LvUscite.Columns(7).Width = 150

        lvScomposizione.View = View.Details
        lvScomposizione.Columns.Add("Estratti")
        lvScomposizione.Columns.Add("Ruote")
        lvScomposizione.Columns.Add("Sorte")
        lvScomposizione.Columns.Add("Ritardo")
        lvScomposizione.Columns.Add("RitardoMax")
        lvScomposizione.Columns.Add("IncrRitMax")
        lvScomposizione.Columns.Add("Frequenza")
        lvScomposizione.Columns.Add("Presenze")
        lvScomposizione.Columns.Add("Inizio")
        lvScomposizione.Columns.Add("Fine")
        lvScomposizione.Columns.Add("Posizioni")

    End Sub

    Private Sub btnRicerca_Click(sender As Object, e As EventArgs) Handles btnRicerca.Click
        LanciaStatistica()
    End Sub

    Private Sub frmStatLung_Load(sender As Object, e As EventArgs) Handles Me.Load
        LoadComboSorte(cmbSorte)
        LoadComboConf()
        loadComboSvil(Me.CmbClasseScomponi)
        addcolumns()
        CtlSelPosizione1.SetCheckSelezionate(DefaultCheckPos())
    End Sub
    Private Sub LoadComboConf()
        cmbTipoGrafico.Items.Add("Distibuzione ritardi")
        cmbTipoGrafico.Items.Add("Confronto teorico/reale")
    End Sub

    Private Sub txtNumeri_KeyDown(sender As Object, e As KeyEventArgs) Handles txtNumeri.KeyDown
        SoloCaratteriPerInserimentoLunghette(e)
    End Sub

    Private Sub PerformAddUscite(frz As struct_formazione)
        Dim itm As ListViewItem
        For k = 0 To UBound(frz.aUscite)
            itm = LvUscite.Items.Add(frz.aUscite(k).IdEstr)
            itm.SubItems.Add(cArchivio.GetDataEstrazione(frz.aUscite(k).IdEstr))
            itm.SubItems.Add(NumeriUscitiToString(frz.aUscite(k)))
            itm.SubItems.Add(frz.aUscite(k).Ritardo)
            itm.SubItems.Add(frz.aUscite(k).RitardoMax)
            itm.SubItems.Add(frz.aUscite(k).Presenze)
            itm.SubItems.Add(frz.aUscite(k).Frequenza)
            itm.SubItems.Add(frz.aUscite(k).IncrRitMax)
        Next
    End Sub
    Private Sub ReadParameter()
        Dim frz As New struct_formazione
        Dim aNumeri() As Integer = Nothing
        Dim aRuote() As Boolean
        Dim aPos() As Boolean = Nothing
        Dim nSorte As Integer
        Dim Inizio As Integer
        Dim fine As Integer
        If Me.LvLunghette.SelectedItems.Count Then
            Dim itmSel As ListViewItem = LvLunghette.SelectedItems(0)
            If GetParamFromItem(itmSel, aNumeri, aRuote, aPos, nSorte, Inizio, fine) Then
                If frz.Inizializza(aNumeri, aRuote, nSorte, Inizio, fine, aPos) Then
                    LvUscite.Items.Clear()
                    cArchivio.StatFormazione(frz)
                    PerformAddUscite(frz)
                    ChartCreate(frz)
                End If
            End If
        End If

    End Sub
    Private Function GetParamFromItem(itmsel As ListViewItem, ByRef aNumeri() As Integer, ByRef aRuote() As Boolean, ByRef aPos() As Boolean, ByRef nSorte As Integer, Inizio As Integer, fine As Integer) As Boolean
        GetArrayNumeriFromString(itmsel.Text, aNumeri)
        aRuote = StringaRuoteToBool(itmsel.SubItems(1).Text, ".")
        nSorte = ConvertToInt(itmsel.SubItems(2).Text)
        Inizio = ConvertToInt(itmsel.SubItems(8).Text)
        fine = ConvertToInt(itmsel.SubItems(9).Text)
        StringaNumeriToArray(itmsel.SubItems(10).Text, aPos, 5)
        Return True
    End Function
    Private Function ChartCreate(frz As struct_formazione)
        Select Case cmbTipoGrafico.SelectedItem
            Case "Distibuzione ritardi"
                Dim table As New DataTable
                Dim aQUscitePerRit(101) As Integer
                Dim strRit As String
                table.Columns.Add("x", GetType(String))
                table.Columns.Add("y", GetType(Integer))

                For k = 0 To UBound(frz.aUscite)
                    If frz.aUscite(k).Ritardo <= 100 Then
                        aQUscitePerRit(frz.aUscite(k).Ritardo) += 1
                    Else
                        aQUscitePerRit(101) += 1
                    End If
                Next
                For k = 0 To UBound(aQUscitePerRit)
                    strRit = ""
                    If k <= 100 Then
                        strRit = strRit & "= " & k
                    Else
                        strRit = strRit & "> " & "100"
                    End If
                    table.Rows.Add(strRit, aQUscitePerRit(k))
                Next
                Dim ChartArea1 As ChartArea = New ChartArea()
                Dim Legend1 As Legend = New Legend()
                Dim Series1 As Series = New Series()
                Chart1.ChartAreas.Clear()
                Chart1.Legends.Clear()
                Chart1.Series.Clear()
                Chart1.Titles.Clear()
                ChartArea1.Name = "ChartArea1"
                ChartArea1.AxisX.IsMarginVisible = False
                ChartArea1.AxisX.Interval = 1
                ChartArea1.AxisY.Interval = 5
                Chart1.ChartAreas.Add(ChartArea1)
                Legend1.Name = "Legend1"
                Chart1.Legends.Add(Legend1)
                Chart1.Name = "Chart1"
                Series1.ChartArea = "ChartArea1"
                Series1.Legend = "Legend1"
                Series1.Name = "Presenze al ritardo"
                Series1.ChartType = SeriesChartType.Column
                Series1.Color = Color.Red
                Series1.BorderWidth = 2
                Chart1.Series.Add(Series1)
                Chart1.Text = "Distibuzione ritardi "
                Chart1.Series("Presenze al ritardo").XValueMember = "x"
                Chart1.Series("Presenze al ritardo").YValueMembers = "y"

                Chart1.Titles.Add(Chart1.Text)


                Chart1.DataSource = table
            Case "Confronto teorico/reale"
                Dim nRitNat As Decimal
                nRitNat = RitardoNaturale(frz.GetQuantitaNumeri, frz.Sorte, frz.GetQuantitaPosUsate, frz.GetQuantitaRuoteUsate)

                Dim table As New DataTable

                table.Columns.Add("x", GetType(Single))
                table.Columns.Add("yPres", GetType(Single))
                table.Columns.Add("yTeo", GetType(Single))



                For k = 0 To UBound(frz.aUscite)
                    table.Rows.Add(frz.aUscite(k).IdEstr, frz.aUscite(k).Presenze, frz.aUscite(k).EstrEsam / nRitNat)
                Next

                Dim ChartArea1 As ChartArea = New ChartArea()
                Dim Legend1 As Legend = New Legend()
                Dim Series1 As Series = New Series()
                Dim Series2 As Series = New Series()

                Chart1.ChartAreas.Clear()
                Chart1.Legends.Clear()
                Chart1.Series.Clear()
                Chart1.Titles.Clear()

                ChartArea1.Name = "ChartArea1"
                ChartArea1.AxisX.IsMarginVisible = False
                Chart1.ChartAreas.Add(ChartArea1)
                Legend1.Name = "Legend1"
                Chart1.Legends.Add(Legend1)
                Chart1.Name = "Chart1"

                Series1.ChartArea = "ChartArea1"
                Series1.Legend = "Legend1"
                Series1.Name = "Reali"
                Series1.ChartType = SeriesChartType.Line
                Series1.Color = Color.Red
                Series1.BorderWidth = 2

                Series2.ChartArea = "ChartArea1"
                Series2.Legend = "Legend1"
                Series2.Name = "Teoriche"
                Series2.ChartType = SeriesChartType.Line
                Series2.Color = Color.Green
                Series2.BorderWidth = 2

                Chart1.Series.Add(Series1)
                Chart1.Series.Add(Series2)

                Chart1.Text = "Confronto presenze reali/teoriche RN " & Math.Round(nRitNat, 2)
                Chart1.Series("Reali").XValueMember = "x"
                Chart1.Series("Reali").YValueMembers = "yPres"
                Chart1.Series("Teoriche").XValueMember = "x"
                Chart1.Series("Teoriche").YValueMembers = "yTeo"

                Chart1.Titles.Add(Chart1.Text)


                Chart1.DataSource = table
        End Select
    End Function
    Private Sub btnScegliNumeri_Click(sender As Object, e As EventArgs) Handles btnScegliNumeri.Click
        SelezionaNumeri(txtNumeri.Text)
    End Sub

    Private Sub CtlLvOrdinabile1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles LvLunghette.SelectedIndexChanged
        ReadParameter()
    End Sub
    Private Function NumeriUscitiToString(strctU As struct_uscita) As String
        Dim SB As New StringBuilder
        Dim strctFrz As StrEstrazione
        If cArchivio.GetEstrazione(strctU.IdEstr, strctFrz) Then
            For e = 1 To 5
                If strctU.aPos(e) = True Then
                    SB.Append(strctFrz.Ruote(strctU.Ruota).Estratto(e))
                    SB.Append(" ")
                Else
                    SB.Append("..")
                    SB.Append(" ")
                End If
            Next
        End If
        Return SB.ToString
    End Function

    Private Sub ButtonPulisci_Click(sender As Object, e As EventArgs) Handles ButtonPulisci.Click
        LvLunghette.Items.Clear()
        LvUscite.Items.Clear()
        Chart1.ChartAreas.Clear()
        Chart1.Legends.Clear()
        Chart1.Series.Clear()
        Chart1.Titles.Clear()
    End Sub

    Private Sub cmbTipoGrafico_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cmbTipoGrafico.SelectedIndexChanged
        ReadParameter()
    End Sub

    Private Sub loadComboSvil(cmb As ComboBox)
        For k As Integer = 1 To 10
            cmb.Items.Add(k)
        Next
    End Sub
    Sub AlimentaLvScomposizione()

        Dim aNumeri() As Integer = Nothing
        Dim aRuote() As Boolean = Nothing
        Dim aPos() As Boolean = Nothing
        Dim nSorte As Integer
        Dim Inizio As Integer
        Dim fine As Integer
        Dim frz As New struct_formazione
        Dim nClasse As Integer = ConvertToInt(CmbClasseScomponi.Text)
        Dim sRuote As String
        Dim sPosizioni As String

        Try



            lvScomposizione.Items.Clear()


            If Me.LvLunghette.SelectedItems.Count Then
                Dim itmSel As ListViewItem = LvLunghette.SelectedItems(0)
                If GetParamFromItem(itmSel, aNumeri, aRuote, aPos, nSorte, Inizio, fine) Then
                    sRuote = RuoteBToString(aRuote)
                    sPosizioni = ArrayNumeriToString(aPos)
                    If nClasse < aNumeri.GetUpperBound(0) AndAlso nClasse >= nSorte AndAlso nClasse > 0 Then
                        Dim cSvil = New ClsSviluppo
                        Dim aCol() As Integer
                        If MessageBox.Show("Le colonne risultanti sono " & Combinazioni(aNumeri.GetUpperBound(0), nClasse) & " continuo ? ", "Errore", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = DialogResult.Yes Then
                            If cSvil.InitSviluppoIntegrale(aNumeri, nClasse) Then
                                ReDim aCol(nClasse)
                                lvScomposizione.Visible = False

                                Do While cSvil.GetCombFromSviluppo(aCol)
                                    If frz.Inizializza(aCol, aRuote, nSorte, Inizio, fine, aPos) Then
                                        If cArchivio.StatFormazione(frz) Then
                                            Dim itm As ListViewItem = lvScomposizione.Items.Add(ArrayNumeriToString(aCol))
                                            itm.SubItems.Add(sRuote)
                                            itm.SubItems.Add(frz.Sorte)
                                            itm.SubItems.Add(frz.Ritardo)
                                            itm.SubItems.Add(frz.RitardoMax)
                                            itm.SubItems.Add(frz.IncrRitMax)
                                            itm.SubItems.Add(frz.Frequenza)
                                            itm.SubItems.Add(frz.Presenze)
                                            itm.SubItems.Add(frz.Inizio)
                                            itm.SubItems.Add(frz.Fine)
                                            itm.SubItems.Add(sPosizioni)

                                            itm.Selected = True
                                            itm.EnsureVisible()
                                        End If
                                    End If

                                Loop
                                lvScomposizione.Visible = True

                            End If
                        End If

                        cSvil = Nothing
                    Else
                        If nClasse > aNumeri.GetUpperBound(0) Then
                            MessageBox.Show("Classe di scomposizione non coerente con la quantita di numeri base", "Errore", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
                        End If
                        If nClasse < nSorte Then
                            MessageBox.Show("Classe di scomposizione non coerente con la sorte cercata", "Errore", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
                        End If
                        If nClasse = 0 Then
                            MessageBox.Show("Classe di scomposizione non valida", "Errore", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
                        End If
                    End If


                End If

            End If

        Catch ex As Exception
            MessageBox.Show(ex.Message, "Errore", MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try

    End Sub

    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        AlimentaLvScomposizione()
    End Sub
End Class

ecco il risultato

Senza titolo.png
 

Allegati

  • Senza titolo.png
    Senza titolo.png
    282,2 KB · Visite: 11
Ho fatto diverse prove ma ho notato una cosa. La sezione scomposizione è un arma a doppio taglio. Ponendo il presupposto di essere un utente che non conosce il funzionamento del programma e le naturali tempistiche di esecuzione, ingenuamente potrei sviluppare per esempio 90 numeri in 6ine. Questo implicherebbe che il programma muoia li per 47 anni (si fa per dire in modo scherzoso naturalmente, non sia mai ci sia qualcuno che calcoli il tempo teorico di esecuzione in relazione al pc in uso) senza permettere all'utente di effettuare nulla ne tanto meno chiuderlo. Sarebbe comodo inserire una barra di avanzamento che faccia capire che il programma non è morto ed un pulsante di annullamento in caso di ripensamento. Tu che dici? Sbaglio?
 
ciao Edoardo bravo , meno male che hai messo l'immagine a dimostrazione , non avendo un processore nel cervello non potevo verificare bene che funzionasse leggendo il codice :)
Puoi tranquillamente aggiustare la finestra per mettere la tua progressbar. Io propriopper il motivo che hai detto ho messo la msgbox di conferma per far sapere all'utente quante colonne fossero.
Lo sviluppo lo fa con un ciclo do che puoi tranquillamente interrompere se imposti una variabile globale al form bFermaSviluppo.
Poi il pulsante che lancia lo sviluppo se c'è scritto esegui cambi il testo in stop lanci lo sviluppo lo rimposti ad esegui , se c'è scritto stop imposti a true la variabile bFermaSviluppo che verra tewstata durante il ciclo e nel cao uscira. Puoi pure far apparire un pulsante stopo solo mentre lo sviluppo è in corso cosi non devi gestire il text del pulsante
Forse vale la pena di mettere un limitie alle colonne riultati sia perche la listview non puo comunque contenerle sia perche infondo quella funzione serve per scomporre una lunghetta di poca o media quantita di numeri non per sviluppare un integrale...
 
inoltre sarebbe opportuna una sub con un parametro true /false che possa abilitare o disabilitare le varie parti interattive della finestra finche c'è l'elaborazionei ncorso.
in quest sub puoi impostare la proprietà enabled dei varicontrolli in modo che siano disabilitati durante l'esecuzione dello sviluppo.
devi disabilitare il pannello checontiene i pulsantisopra , la listview principale , le tabpages del tabstrip che nonsiano quelle della funzione di scomposizione.
prima di lanciare lo sviluppo con questa funzione disabiliti , al termine riabiliti.
 
Ho un problema. Ho inserito in modo corretto la progressBar. Ho anche gestito i pulsati esegui ed annulla, ma durante l'esecuzione dello sviluppo il tasto annulla anche se enable non me lo fa cliccare

 
Perfetto fatto tutto anche la sub con parametro true/false. Funziona tutto perfettamente

 
ok passiamo al cerchio cicloetrico , i sorgenti non li ho scaricati per ora mi fido :-)

fai una form cosi

1637666974725.png

dopo di che vedi di far funzionare nel tuo progetto questa routine e considera che pure questa va lanciata da quella che lanci al selection change della lista principale

Codice:
Friend Sub DisegnaCerchioCiclometrico(Optional frz As struct_formazione = Nothing)

        Dim aNumeri() As Integer = Nothing
        Dim aRuote() As Boolean = Nothing
        Dim aPos() As Boolean = Nothing
        Dim nSorte As Integer
        Dim Inizio As Integer
        Dim fine As Integer
        Dim aNTmp() As Integer = Nothing

        Dim bOk As Boolean
        Try
            If Not (frz.bInizializzata) Then
                If Me.CtlLvOrdinabile1.SelectedItems.Count Then
                    Dim itmSel As ListViewItem = CtlLvOrdinabile1.SelectedItems(0)
                    If GetParamFromItem(itmSel, aNumeri, aRuote, aPos, nSorte, Inizio, fine) Then
                        If frz.Inizializza(aNumeri, aRuote, nSorte, Inizio, fine, aPos) Then
                            bOk = True

                        End If
                    End If

                End If
            Else
                bOk = True
            End If
            If bOk Then
                With Me.CtlCerchioCiclometrico1
                    .MostraEtichetta = True
                    .TestoEtichetta = "Cerchio ciclometrico"
                    .DisegnaNumeri = CtlCerchioCiclometrico.EDisegnoVertici.Numeri
                    .SpessoreBordoPunti = 1
                    .DisegnaDistanze = ChkDistanze.Checked

                    .Numeri = 90
                    .TipoLayOut = CtlCerchioCiclometrico.ETipoLayOut.Banda
                    .ResetFigure()
                    Dim aN(frz.GetQuantitaNumeri) As Integer
                    For e As Integer = 1 To frz.GetQuantitaNumeri
                        aN(e) = frz.Numeri.Estratto(e)
                    Next
                    Array.Sort(aN)
                    .SetArrayNum(aN, .ColorEvidenziaNum, .BackColorEvidenziaNum, .ColoreFigure, .DrawWidthFigure, Drawing2D.DashStyle.Solid, True, False, False, ChkRiempiFigPrinc.Checked, Color.Blue)



                    If ChkDiametrali.Checked Then
                        Dim aNN() As Integer = Nothing
                        For Each d As ClsDisegnCiclometrico In .CollDisegni
                            If d.IsDiametrale = False AndAlso d.IsDiagonale = False Then
                                ReDim aNN(0)
                                d.GetArrayNum(aNN)
                                ReDim aNTmp(UBound(aNN))
                                For k As Integer = 1 To UBound(aNN)
                                    aNTmp(k) = Diametrale(aNN(k), 90)
                                Next
                                .SetArrayNum(aNTmp, Color.White, Color.Magenta, Color.Magenta, d.DrawWidth, Drawing2D.DashStyle.Solid, True, False, True, ChkRiempiFigDiametr.Checked, Color.Pink)

                            End If
                        Next
                    End If


                    If ChkDiagonali.Checked Then
                        Dim aNN() As Integer = Nothing


                        For Each d As ClsDisegnCiclometrico In .CollDisegni
                            If d.IsDiagonale = False Then

                                d.GetArrayNum(aNN)
                                If aNN(1) > 0 Then
                                    For k As Integer = 1 To UBound(aNN) - 1
                                        For kk As Integer = k + 2 To UBound(aNN)
                                            ReDim aNTmp(2)
                                            aNTmp(1) = aNN(k)
                                            aNTmp(2) = aNN(kk)
                                            If (k = 1 AndAlso kk = 5) = False Then
                                                .SetArrayNum(aNTmp, d.ColorEvidenziaNum, d.BackColorEvidenziaNum, d.ColoreDisegno, 1, Drawing2D.DashStyle.Dot, False, True, False, False, Color.Transparent)
                                            End If


                                        Next
                                    Next
                                End If
                            End If

                        Next

                    End If

                    .InitDisegno(90)
                End With
            End If
        Catch ex As Exception
            MessageBox.Show(ex.Message, "Errore", MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try
    End Sub
 
poi aggiungi questa funzione e lanciala prima di tutto ogni volta che c'è un selection change nellla lista principale

Codice:
  Sub PulisciTutto()
        CtlLvOrdinabile1.Items.Clear()
        CtlLvOrdinabile2.Items.Clear()
        Chart1.Series.Clear()
        CtlCerchioCiclometrico1.ResetFigure()
        lvScomposizione.Items.Clear()
    End Sub

quando fai i grafici fai il clear anche dei titoli ..prima di disegnare il grafico
 
poi aggiungi questa funzione e lanciala prima di tutto ogni volta che c'è un selection change nellla lista principale

Codice:
  Sub PulisciTutto()
        CtlLvOrdinabile1.Items.Clear()
        CtlLvOrdinabile2.Items.Clear()
        Chart1.Series.Clear()
        CtlCerchioCiclometrico1.ResetFigure()
        lvScomposizione.Items.Clear()
    End Sub

quando fai i grafici fai il clear anche dei titoli ..prima di disegnare il grafico
No aspetta tutto tranne gli elementi della lista principale giusto?
 
Perfetto ho fatto tutto ed ho corretto un piccolo bug che non avevo notato (avevo dimenticato di impostare bFermaSviluppo a false ogni qual volta lanciavo lo sviluppo)
 
bravo , va azzerata essendo una variabile globale.
Ora aggiungiamo una altra scheda al tabstrip stotto e chiamala statistica gruppo poi aggiungi 2 listview una come quella di sopra un 'altra come quella delle uscite
 
puoi anche mettere uno splitcontainer i nquesta nuova scheda del tabstrip , magari anche un panel per mettere qualche pulsante che puo servire
 
ok , ora ad ambiente chiuso sostituisci tutte le cartelel che ti mando che non so se ho fatto modifiche che poi ci serviranno per le cose che dobbiamo fare


fai prima un tuo backup , se al riavvio non ti funziona non fare niente e dimmi di che si tratta.
 

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