Mte90 (Member)
Guru
Messaggi: 1144
Iscritto: 25/03/2008
|
Questo topic è stato chiuso dal moderatore 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!
|
|
Il Totem (Admin)
Guru^2
Messaggi: 3635
Iscritto: 24/01/2006
|
Non capisco bene la domanda, né la pertinenza del titolo. Cosa intendi con "ciclicamente"?
|
|
Mte90 (Member)
Guru
Messaggi: 1144
Iscritto: 25/03/2008
|
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:
Codice sorgente - presumibilmente VB.NET |
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
|
Codice sorgente - presumibilmente VB.NET |
For Each c As Control In GetChildControls(Me) If TypeOf c Is GroupBox Then c.Text = "Gruppo" Next
|
con i dovuti import
Codice sorgente - presumibilmente C# / VB.NET |
Imports System.Collections
Imports System.Windows.Forms
|
|
|
Il Totem (Admin)
Guru^2
Messaggi: 3635
Iscritto: 24/01/2006
|
Con ciclicamente avevo inteso a intervalli regolari, evidentemente mi sono sbagliato. Comunque puoi ridurre il codice se vige una certa condizione:
Codice sorgente - presumibilmente VB.NET |
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 il 10/05/2008 alle 17:52 |
|
Mte90 (Member)
Guru
Messaggi: 1144
Iscritto: 25/03/2008
|
si, però con quel codice come faccio a interagire per esempio con tutte le groupbox tranne una?
è lungo fare una decina di if...
|
|
Il Totem (Admin)
Guru^2
Messaggi: 3635
Iscritto: 24/01/2006
|
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.
|
|
Mte90 (Member)
Guru
Messaggi: 1144
Iscritto: 25/03/2008
|
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
|
|
Il Totem (Admin)
Guru^2
Messaggi: 3635
Iscritto: 24/01/2006
|
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:
Codice sorgente - presumibilmente VB.NET |
'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.
|
|
Mte90 (Member)
Guru
Messaggi: 1144
Iscritto: 25/03/2008
|
Non male come codice però ho trovato una soluzione semplice con indice.
Ci sto lavorando e penso che come ho finito uppo il sorgente con esempi con la maggior parte dei controlli.
Grazie totem
|
|