Oppure

Loading
Questo topic e' stato chiuso dal moderatore.
08/05/08 20:48
Mte90
ho già cercato sul forum ma non mi interessa come gestire gli eventi dei controlli.
Ho la necessita di cambiare ciclicamente delle proprietà di controlli già esistenti da codice.
sto cercando per il web ma non trovo qualcosa ke mi possa aiutare...
chiedo aiuto qui

ciao e grazie!
aaa
09/05/08 16:17
Il Totem
Non capisco bene la domanda, né la pertinenza del titolo. Cosa intendi con "ciclicamente"?
aaa
09/05/08 19:37
Mte90
Ho dei controlli su cui devo agire ciclicamente ovvero ho 8 groupbox che devono essere messe enabled a secondadi un numero inserito in una text.
Per fare questo fare un codice con i case o con gli if non finisce più...
Quindi è molto più pratico che a seconda del numero io ciclicamente imposto la proprietà come serve a me.
Ho trovato un codice che lo fà direttamente a tutte:
Function GetChildControls(ByVal ctrl As Control) As Control()
        Dim controls As New ArrayList
        For Each c As Control In ctrl.Controls
            ' aggiunge questo controllo e tutti i suoi controlli
            ' annidati
            controls.Add(c)
            controls.AddRange(GetChildControls(c))
        Next
        ' ritorna il risultato sotto forma di array di controlli
        Return DirectCast(controls.ToArray(GetType(Control)), Control())
    End Function

        For Each c As Control In GetChildControls(Me)
            If TypeOf c Is GroupBox Then c.Text = "Gruppo" 
        Next

con i dovuti import
Imports System.Collections
Imports System.Windows.Forms
aaa
10/05/08 15:50
Il Totem
Con ciclicamente avevo inteso a intervalli regolari, evidentemente mi sono sbagliato. Comunque puoi ridurre il codice se vige una certa condizione:
For Each C As Control In Me.Controls
  'Se le groupbox non sono nidificate...
  If TypeOf C Is GroupBox Then
    C.Text = "Gruppo"
  End If
Next
Ultima modifica effettuata da Il Totem 10/05/08 15:52
aaa
10/05/08 16:56
Mte90
si, però con quel codice come faccio a interagire per esempio con tutte le groupbox tranne una?
è lungo fare una decina di if...
aaa
11/05/08 15:37
Il Totem
Posto che lo dovresti fare con entrami i codici, dipende da cosa vuoi fare. Spesso c'è un modo più veloce, ma dovresti dirmi quale è la condizone che devi esaminare.
aaa
11/05/08 18:49
Mte90
a seconda di un numero inserito dall'utente devo impostare come enabled a seconda del numero una quantità di groupbox.
se l'utente mi inserisci come valore 4 e io ho inserito 8 groupbox le prime 4 hanno come valore enabled true le altre no.
Mi serve questo ma fare una serie di if per una cosa che si può fare con i for non è da bravo programmatore XD
aaa
12/05/08 16:03
Il Totem
In questo caso è semplice. Numera le groupbox con un indice: GroupBox1, GroupBox2, eccetera... Dopo aver letto il numero, cicli sui controlli ed agisci in questo modo:
'Questo le leggi come input dall'utente
Dim Index As Int32
Dim N As Int32
'...
For Each C As Control In Me.Controls
  If TypeOf C Is GroupBox Then
    N = CInt(C.Name.Remove(0, "GroupBox".Length))
    C.Enabled = (N <= Index)
  End If
Next

In pratica dividi il nome del controllo ottenendone l'indice come numero e lo confronti con quello immesso dall'utente: se è minore o uguale, attivi la groupbox, altrimenti la disattivi. Funziona anche meglio se l'indice lo metti nella proprietà Tag del controllo.
aaa