Novità

Mente da programmatore

perche è 13 se la stringa ha 12 caratteri ? s.Length da 12 , lo 0 non lo contiamo e non lo usiamo
 
io dicevo cosi ,forse la confusione dipende dal fatto che quando si estraggono le sottostringhe la funzione parte da 0 , ma un conto è l'indice del carattere un conto la lunghezza della stringa.


Codice:
Function Stringa01ToArrayB(s As String) As Boolean()
        Dim str As String
        Dim aB() As Boolean
        ReDim aB(s.Length)
        For r As Integer = 0 To s.Length - 1
            str = s.Substring(r, 1)
            If str = "1" Then
                aB(r + 1) = True
            Else
                aB(r + 1) = False
            End If
        Next
        Return aB
    End Function
 
io dicevo cosi

Codice:
Function Stringa01ToArrayB(s As String) As Boolean()
        Dim str As String
        Dim aB() As Boolean
        ReDim aB(s.Length)
        For r As Integer = 0 To s.Length - 1
            str = s.Substring(r, 1)
            If str = "1" Then
                aB(r + 1) = True
            Else
                aB(r + 1) = False
            End If
        Next
        Return aB
    End Function
Aaaaaaaaaaaaaaaaah ecco perché ...appena possibile effettuo rettifica e posto progetto
 
Ciao Luigi,
volevo complimentarmi per come metti a disposizione delle persone il tuo sapere e con quanta attenzioni li segui.
Sei davvero una persona speciale.
Grazie infinite.
Simimi
 
il motivo è molto semplice tu devi lavorare con i limiti degli array non con la loro lunghezza.
inveche che array.length devi fare ubound(array) , correggilo da tutte le parti , usa la funzione find per non farti sfuggire nulla
 
appena hai fatto posta il progetto corretto , attento che legth applicato alle stringe invece lo devi lasciare come'è , solo sugli array visto che partono da 0 un array che ha come limite superiore 12 da risultato 13 come length e 12 come ubound
 
Ecco la versione corretta e funzionante:

 
ora facciamo una piccola modifica al controllo che selziona le ruote
cosi abbiamo occasione di parlare di una importante funzionalità offerta dal vb net.
L'ereditarietà.

Partiamo con spiegare il nostro problema , noi vogliamo fare in modo che quando clicchiamo
sulle check box delle ruote se questo è cheked = true il suo colore cambi con uno che vogliamo
noi e non con quello di default.

per fare questo creiamo un nuoovo controllo che eredità dalla check box , questo
vuol dire che con una sola linea di codice possiamo gia creare un controllo
tale e quale alle chekckbox con tutte le sue prprietà metodi ed eventi.

a questo controlllo possiamo aggiungere le prorietà che ci interessano e persino sovrascrivere le proprietà o gli eventi
del controllo di base , ed è proprio questa ultima cosa che ci serve a noi.

vogliamo sovrascrivere l'evento OnCheckedChanged in modo tale che appena il controllo viene impostato a cheked = true
non solo compare il baffettto ma cambia pure colore .

ora dato che non lo hai mai fatto questa classe che eredita dalla check box la metto qui io tu devi inserirla nel progetto.

quando carichi le checkbox invece che usare l'oggetto checkbox usa l'oggetto clsChekBoxModificata

manda in run il proetto e ved ise chekkando le ruote cambiano colore , se funziona avvertimi che aggiungiamo ancora una cosa



Codice:
Public Class clsChekBoxModificata

    Inherits CheckBox  ' con questa  istruzione ereditiamo dalla chekbox


    ' qui gestiamo le proprieta per memorizzare i colori normali e selezionati

    Private mBackColorNormale As Color = SystemColors.Control
    Private mBackColorSelected As Color = Color.Red
    Private mForeColorNormale As Color = SystemColors.WindowText
    Private mForeColorSelected As Color = Color.White






    Public Property BackColorNormale As Color
        Get
            Return mBackColorNormale
        End Get
        Set(value As Color)
            mBackColorNormale = value
        End Set
    End Property
    Public Property BackColorSelected As Color
        Get
            Return mBackColorSelected
        End Get
        Set(value As Color)
            mBackColorSelected = value
        End Set
    End Property

    Public Property ForeColorNormale As Color
        Get
            Return mForeColorNormale
        End Get
        Set(value As Color)
            mForeColorNormale = value
        End Set
    End Property

    Public Property ForeColorSelected As Color
        Get
            Return mForeColorSelected
        End Get
        Set(value As Color)
            mForeColorSelected = value
        End Set
    End Property

' qui andiamo a sovrascrivere l'evento  della classe di base per poter gestire il colore


    Protected Overrides Sub OnCheckedChanged(e As EventArgs)
        MyBase.OnCheckedChanged(e)
        If MyBase.Checked Then
            Me.BackColor = mBackColorSelected
            Me.ForeColor = mForeColorSelected

        Else
            Me.BackColor = mBackColorNormale
            Me.ForeColor = mForeColorNormale

        End If
    End Sub

End Class
 
benissimo allora adesso vanno aggiunte 4 proprieta al controllo seleziona ruote ,queste 4 proprietà sono BackColorNormale e BackColorSelezionato , ForeColorNormale e ForeColorSelezioanto

servono per fare in modo che durante la routine che carica le chek box possano essere usate per impostare le relative delle chekbox.

cioe durante il ciclo che carica le check box valorizzi le prorieta analoghe della check box con queste implementate nel controllo range


spero di essermi fatto capire :) , noi abbiamo incapsulato nel nostro controllo range dei controlli chekboxche abbiamo creato apposta e dall'esterno ne dobbiam ogestire le proprietà , le proprietà le puoi tranquillamente copiare dalal classe che hai appena inserito
 
Quindi semplicemente cosi giusto?

Codice:
Public Class cltSelRuote
    Private Check() As CheckBox
    Private Const nCheck As Integer = 12
    Private mBackColorNormale As Color = SystemColors.Control
    Private mBackColorSelected As Color = Color.Red
    Private mForeColorNormale As Color = SystemColors.WindowText
    Private mForeColorSelected As Color = Color.White
    Public Property BackColorNormale As Color
        Get
            Return mBackColorNormale
        End Get
        Set(value As Color)
            mBackColorNormale = value
        End Set
    End Property
    Public Property BackColorSelected As Color
        Get
            Return mBackColorSelected
        End Get
        Set(value As Color)
            mBackColorSelected = value
        End Set
    End Property

    Public Property ForeColorNormale As Color
        Get
            Return mForeColorNormale
        End Get
        Set(value As Color)
            mForeColorNormale = value
        End Set
    End Property

    Public Property ForeColorSelected As Color
        Get
            Return mForeColorSelected
        End Get
        Set(value As Color)
            mForeColorSelected = value
        End Set
    End Property

    Private Sub cltSelRuote_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        LoadCampi()
    End Sub

    Sub LoadCampi()
        Dim i As Integer
        Dim nX As Integer, nY As Integer
        Dim nHTxt As Integer = 15, nWTxt As Integer = 25
        Dim Altezza As Integer = 21, Larghezza As Integer = 35
        Dim nLeft As Integer = 10
        ReDim Check(nCheck)
        nX = 0
        nY = 0
        For r As Integer = 1 To nCheck
            i += 1
            Check(i) = New clsChekBoxModificata
            With Check(i)
                .AutoSize = False
                .Checked = False
                .Left = nX
                .Top = nY
                .Width = Larghezza
                .Height = Altezza
                .TextAlign = ContentAlignment.MiddleCenter
                .Appearance = Appearance.Button
                .Text = NomiRuote(i).NomeAbbreviato
                Me.Controls.Add(Check(i))
                AddHandler Check(i).CheckStateChanged, AddressOf Gestione_CheckstateChanged
                .Visible = True
            End With
            nX = nX + Larghezza
        Next

    End Sub
    Private Sub Gestione_CheckstateChanged(sender As Object, e As EventArgs)

    End Sub

    Function GetRuoteSelezionate(ByRef aRetRuote() As Integer) As Integer
        Dim i As Integer
        ReDim aRetRuote(nCheck) ' dimensiono al massimo possibile
        For x As Integer = 1 To nCheck
            If Check(x).Checked = True Then
                i += 1
                aRetRuote(i) = x   ' giusto
            End If
        Next
        ReDim Preserve aRetRuote(i) ' ridimensiono al numero di ruote trovate
        Return i
    End Function

    Function GetRuoteSelezionate(ByRef aRetRuote() As Boolean) As Integer
        Dim i As Integer
        ReDim aRetRuote(nCheck) ' dimensiono al massimo possibile
        For x As Integer = 1 To nCheck
            If Check(x).Checked = True Then
                i += 1
                aRetRuote(x) = True
            End If
        Next
        Return i
    End Function

    Sub SetRuoteSelezionate(aRuote() As Integer)
        For x As Integer = 1 To UBound(aRuote)
            Check(aRuote(x)).Checked = True
        Next
    End Sub
    Sub SetRuoteSelezionate(aRuote() As Boolean)
        For x As Integer = 1 To UBound(aRuote)
            Check(x).Checked = aRuote(x)
        Next
    End Sub
End Class
 
perfetto , è chiaro che al property let bisogna lanciare la procedura che fa il load delle checkbox per cambiargli le proprietà
nella routine loadcampi fai prima il controls.clear per scaricare gli oggett igia caricati
 
un altra cosa , crea un array locale al controllo e valorizzalo con i nomi delle ruote poi usa quello , in modo da non essere legato all'array delel ruote globale cosi pure in fase di progettazione il controllo avra tutte le chek caricate.
Inoltre tu nella routine usavi un contatore i inutile , levalo e usa r

Codice:
Dim aRuote() = {"", "ba", "ca", "Fi", "Ge", "Mi", "Na", "Pa", "Rm", "To", "Ve", "Nz", "Tt"}
Me.Controls.clear
        For r As Integer = 1 To nCheck

            Check(r) = New clsChekBoxModificata
            With Check(r)
                .AutoSize = False
                .Checked = False

                .Left = nX
                .Top = nY
                .Width = Larghezza
                .Height = Altezza
                .TextAlign = ContentAlignment.MiddleCenter
                .Appearance = Appearance.Button
                .Text = aRuote(r)
                Me.Controls.Add(Check(r))
                AddHandler Check(r).CheckStateChanged, AddressOf Gestione_CheckstateChanged
                .Visible = True
            End With
            nX = nX + Larghezza
        Next
 

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