Novità

Mente da programmatore

L

LuigiB

Guest
dopo aver fatto le modifiche di ci sopra la textbox dei numeri levala e mettici una combobox , anche in quella si puo scrivere a mano e ha la peoprietà text ,in piu nella combo possiamo caricare i nomi delel formazioni tradizionali che leggeremo da un 'apposita cartella.

quindi
1) crea una nuova funzione che crea e torna il percorso Formazionitradizionali

mettici dentro questi file che ho preso da spaziometria

poi fai una funzione come quella che hai appena fatto per la lista delle formazioni da aprire che va a caricare la combobox con i nomi delle formazioni.
Mi raccomando devi inserire nella lista oggett del tipo clsItemCombo come abbiam ofatto di la.

anzi potresti usare quella funzione li tale e quale solo che invece della list deve riempire una combobox con i nomi dei file letti da una cartella
 
Ultima modifica di un moderatore:

Edoardo_95

Advanced Member
quindi cosi ?

Codice:
    Function ScegliFileFormazioniTradizionali(sFilePercorso As String, cmb As ComboBox, Optional Estensione As String = "*.csv") As String
        Dim frm As New frmStatLung
        Dim Ext As String = Estensione.TrimStart("*")
        Dim AllFile() As String = GetAllFileInPath(sFilePercorso, Estensione)
        Dim cItm As ClsItemCombo
        For k = 0 To UBound(AllFile)
            cItm = New ClsItemCombo
            cItm.Text = GetNomeFileSenzaEstensione(AllFile(k))
            cItm.Tag = AllFile(k)
            cmb.Items.Add(cItm)
        Next
    ====> qui inserisco la selezione dell'item
    End Function

Codice:
    Private Sub frmStatLung_Load(sender As Object, e As EventArgs) Handles Me.Load
        CreaFolderFileDefault(GetDirFormazioniTradizionali)
        ScegliFileFormazioniTradizionali(GetDirFormazioniTradizionali, cmbNumeri)
        LoadComboSorte(cmbSorte)
        LoadComboConf()
        loadComboSvil(Me.CmbClasseScomponi)
        addcolumns()
        ButtonSalva.Enabled = False
        CtlSelPosizione1.SetCheckSelezionate(DefaultCheckPos())
    End Sub
 
L

LuigiB

Guest
no no , asl posto della text dei numeri metti una combo
in questa combo si potranno sia scrivere i numeri che selezionare le formazioni
quindi devi alimentarla con i file letti dalla cartella prevista
intanto fai questo
 

Edoardo_95

Advanced Member
no no , asl posto della text dei numeri metti una combo
in questa combo si potranno sia scrivere i numeri che selezionare le formazioni
quindi devi alimentarla con i file letti dalla cartella prevista
intanto fai questo
Al posto della text ho già messo la combo ed ho già modificato lancia statistica con il parametro e funziona come prima solo che ora oltre a scrivere c'è il menù a tendina
 
L

LuigiB

Guest
ah perfett o, non avevo capito
A questo punto al pulsante devi testare se è selezionato un 'item nella combo.
cioè il fatto che ci sia scritto qualcosa dentro la proprietà texxt non vuol dire che sia selezionato un item quindi se è selezionato un item fai una cosa se non è selezionato ma il testo è valido allora fai come prima e lanmci la statistica passando quel valore.
se invece un item è selezionato fai il cast dell'item al tipo clsItemCombo e leggendo il tag saprai quale file è stato selezionato alche lo leggi e record per record lanci la funziione statistica passando il record letto dal file
 

Edoardo_95

Advanced Member
Fatto funziona tutto posto in ordine codice:

Prima ho modificato lanciastatistica

Codice:
    Sub LanciaStatistica(sNumeri As String)
        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(sNumeri, 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

ho sostituito textbox con combobox


combocob.png



poi nel modulo assistente ho creato una procedura che carica gli item, tag ecc

Codice:
    Sub LoadComboTradizionali(sFilePercorso As String, cmb As ComboBox, Optional Estensione As String = "*.csv")
        Dim frm As New frmStatLung
        Dim Ext As String = Estensione.TrimStart("*")
        Dim AllFile() As String = GetAllFileInPath(sFilePercorso, Estensione)
        Dim cItm As ClsItemCombo
        For k = 0 To UBound(AllFile)
            cItm = New ClsItemCombo
            cItm.Text = GetNomeFileSenzaEstensione(AllFile(k))
            cItm.Tag = AllFile(k)
            cmb.Items.Add(cItm)
        Next
    End Sub


ho caricato le combo al load del form

Codice:
    Private Sub frmStatLung_Load(sender As Object, e As EventArgs) Handles Me.Load
        CreaFolderFileDefault(GetDirFormazioniTradizionali)
        LoadComboTradizionali(GetDirFormazioniTradizionali, cmbNumeri) <===================================
        LoadComboSorte(cmbSorte)
        LoadComboConf()
        loadComboSvil(Me.CmbClasseScomponi)
        addcolumns()
        ButtonSalva.Enabled = False
        CtlSelPosizione1.SetCheckSelezionate(DefaultCheckPos())
    End Sub

risultato

Senza titolo.png


ho creato una function che che riceve il percorso del file lo legge e restituisce un array di stringhe

Codice:
   Private Function LeggiRecordFormazioniTradizionali(sFileDir As String) As String()

        If FileExist(sFileDir) Then
            Dim SR As New StreamReader(sFileDir)
            Dim SB As New StringBuilder
            Dim sline As String
            Dim sRecord() As String
            Dim aStr() As String
            Dim nRiga As Integer
            sline = SR.ReadLine

            Do Until sline Is Nothing
                sRecord = sline.Split(";")
                SB.Clear()
                nRiga += 1
                For k = 0 To UBound(sRecord)
                    SB.Append(sRecord(k)).Append(";")
                Next
                SB.Remove(SB.Length - 1, 1)
                ReDim Preserve aStr(nRiga)
                aStr(nRiga) = SB.ToString
                sline = SR.ReadLine
            Loop
            Return aStr
        End If
    End Function


al click del button su lancia statistica ho fatto cosi:

Codice:
    Private Sub btnRicerca_Click(sender As Object, e As EventArgs) Handles btnRicerca.Click
        Dim cItm As ClsItemCombo
        Dim aStr() As String
        If cmbNumeri.SelectedIndex >= 0 Then
            LvLunghette.Items.Clear()
            cItm = DirectCast(cmbNumeri.SelectedItem, ClsItemCombo)
            aStr = LeggiRecordFormazioniTradizionali(cItm.Tag)
            For k = 1 To UBound(aStr)
                LanciaStatistica(aStr(k))
            Next
        Else
            LanciaStatistica(cmbNumeri.Text)
        End If

        If LvLunghette.Items.Count > 0 Then
            ButtonSalva.Enabled = True
        End If

    End Sub


Risultato

Senza titolo.png
 
L

LuigiB

Guest
ok , ottimo se funziona tutto allora rimane questo metti un nuovo modulo e un nuovo pulsante Esporta Excel per chi ce l'ha senno non funzioa

nel pulsante

Codice:
 Dim coll As Collection = New Collection

        coll.Add(Me.LvLunghette)
' puoi aggiungere anche altre listview
        Call ExportLvToExcel(coll)

Codice:
Module ModFunzioniXls



    Sub ExportLvToExcel(collLv As Collection)
        Dim sRetErr As String = ""
        Dim oExcel As Object '  Excel.Application
        Dim oBook As Object ' Excel.Workbook
        Dim xlSheet As Object '  Excel.Worksheet
        Dim sCol As String
        Dim nRiga As Integer
        Dim sTmp As String

        Try






            oExcel = CreateObject("Excel.Application")
            oBook = oExcel.Workbooks.Add()

            For Each lv As ListView In collLv
                xlSheet = oBook.Worksheets.Add
                xlSheet.Name = lv.Name


                nRiga = 1
                For Each ch As ColumnHeader In lv.Columns
                    sCol = LetteraColonna(oExcel, ch.Index + 1)
                    xlSheet.Range(sCol & nRiga.ToString).Value = ch.Text
                    xlSheet.Range(sCol & nRiga.ToString).Font.Bold = True
                    xlSheet.Range(sCol & nRiga.ToString).Interior.Color = Color.Gray
                    With xlSheet.Range(sCol & nRiga.ToString).Borders
                        .LineStyle = 1
                        .ColorIndex = 0
                        .TintAndShade = 0
                        .Weight = 2
                    End With

                Next
                If lv.Items.Count Then
                    For Each ch As ColumnHeader In lv.Columns
                        sCol = LetteraColonna(oExcel, ch.Index + 1)
                        If ch.Index = 0 Then
                            sTmp = lv.Items(0).Text
                        Else
                            sTmp = lv.Items(0).SubItems(ch.Index).Text
                        End If
                        If Not IsNumeric(sTmp) Or sTmp.Contains(".") Then
                            xlSheet.Range(sCol & "1").EntireColumn.NumberFormat = "@" ' celle formato testo 

                        End If
                    Next


                    For Each itm As ListViewItem In lv.Items
                        nRiga += 1
                        For Each ch As ColumnHeader In lv.Columns
                            sCol = LetteraColonna(oExcel, ch.Index + 1)
                            If ch.Index = 0 Then
                                xlSheet.Range(sCol & nRiga.ToString).Value = itm.Text

                            Else
                                xlSheet.Range(sCol & nRiga.ToString).Value = itm.SubItems(ch.Index).Text

                            End If


                        Next

                    Next
                End If

                xlSheet.Range("A1:" & LetteraColonna(oExcel, lv.Columns.Count) & "1").EntireColumn.AutoFit()

            Next




            oExcel.Visible = True


        Catch ex As Exception
            MessageBox.Show(sRetErr, "Istanza excel", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
        End Try
    End Sub







    Function LetteraColonna(oExcel As Object, ByVal lngCol As Object) As String
        Dim vArr




        vArr = Split(oExcel.Cells(1, lngCol).Address(True, False), "$")
        LetteraColonna = vArr(0)
    End Function
End Module
 
L

LuigiB

Guest
c'è da fare anche un altra cosa
aggiungi una colonna alla prima listview , quando alimenti da formazione in quella colonna scrivi il nome della formazione
 
L

LuigiB

Guest
se inserisci i numeri da formazioni stai inserendo piu lunghette appartenenti allo stesso insieme , ci vorra un modo per identificare che quelle lungette sono tutte dell ostesso insieme.
Nella prima listview quella principale va aggiunta una colonna "Descrizione" , "Nome" .. chiamala come ti pare ..
quando alimenti la list con la statistica prresa dai record deelle formazioni in questa colonna ciscrivi il nome della formazione..
 
L

LuigiB

Guest
bhe strano , rimuovi il controll odegli errori e vedi dove si blocca , metti un breackpoint su createobject
 

Edoardo_95

Advanced Member
Fatto tutto ed è tutto perfettamente funzionante:

 
L

LuigiB

Guest
compreso excel ? allora io ora fare ancora una cosa , il pulsante 123 che seleziona i numewri fagli chiamare l'altra funzione SelezionaNumeriSorte in maniera che se uno vuole inserire i numeri tramite pannello possa inserire i parametri tutti insieme ed avere subito la statistica
 
L

LuigiB

Guest
piu che usare l'altra funzione ti conviene crearne un 'altra con lo stesso nome ma con altri tipi di parametri piu adatti per essere passati alla statistica ,quella di prima serviva per editare l'item della lista . per implementare questa cosa non potrai usare la sub statistica che ga hai qui ne devi creare una apposta per inizialixzzare una formazzione con i parametri letti con la funzione e lanciare la statistica su quei numeri con quei parametri presi tut idal pannello
 

Ultima estrazione Lotto

  • Estrazione del lotto
    giovedì 28 marzo 2024
    Bari
    49
    73
    67
    86
    19
    Cagliari
    64
    36
    37
    02
    04
    Firenze
    66
    27
    44
    90
    17
    Genova
    09
    44
    78
    85
    19
    Milano
    70
    14
    47
    38
    27
    Napoli
    80
    29
    28
    45
    39
    Palermo
    54
    59
    78
    47
    62
    Roma
    17
    22
    49
    52
    88
    Torino
    71
    35
    75
    74
    60
    Venezia
    40
    84
    02
    63
    29
    Nazionale
    08
    13
    44
    69
    85
    Estrazione Simbolotto
    Firenze
    06
    35
    16
    18
    05
Alto