Neo1986 (Ex-Member)
Pro
Messaggi: 97
Iscritto: 21/06/2010
|
Questo topic è stato chiuso dal moderatore Buongiorno a tutti,
avrei bisogno di un piccolo aiuto, so che altre persone l'hanno già chiesto sul forum ma purtroppo non sono riuscito a trovare il termine giusto per la ricerca.
Ho 120 textbox, il name di queste è così composto :
TextBoxCom01
TextBoxCom02
TextBoxCom03
....
e così fino a 120.
Come posso fare per disabilitare tramite un for queste caselle di testo?
In pratica come posso utilizzare una stringa come nome di una textbox?
Esempio
Codice sorgente - presumibilmente VB.NET |
For Indice = 1 to 120 Me.TextBoxCom + Indice.tostring.Enable = False Next
|
Grazie
Ultima modifica effettuata da Neo1986 il 05/07/2010 alle 12:09 |
|
HeDo (Founder Member)
Guru^2
Messaggi: 2765
Iscritto: 21/09/2007
|
le textbox come qualsiasi altro componente della gui sono registrati all'interno della collection Controls dell'oggetto form, quindi Me.Controls
basta che fai una ricerca all'interno di Controls e filtri sulla proprietà Name
|
|
Neo1986 (Ex-Member)
Pro
Messaggi: 97
Iscritto: 21/06/2010
|
ho trovato qualche sito che spiega come mettere in pratica la tua teoria, ma secondo te... visto che io non ho bisogno di ricercare ma semplicemente scandire tutte le textbox e disabilitarle, è più veloce il tuo metodo o come dico io?
|
|
HeDo (Founder Member)
Guru^2
Messaggi: 2765
Iscritto: 21/09/2007
|
Postato originariamente da Neo1986:
ho trovato qualche sito che spiega come mettere in pratica la tua teoria, ma secondo te... visto che io non ho bisogno di ricercare ma semplicemente scandire tutte le textbox e disabilitarle, è più veloce il tuo metodo o come dico io? |
beh, considerando che il tuo metodo è completamente inventato, rimane il mio
|
|
Neo1986 (Ex-Member)
Pro
Messaggi: 97
Iscritto: 21/06/2010
|
dici ? completamente inventato?
ba... mi sembrava così semplice comporre il nome della textbox e con un for scandirle tutte... cmq ho provato come hai detto tu.... ma non capisco perchè non funziona
Codice sorgente - presumibilmente VB.NET |
'controllo per la ricerca della checkbox all'interno della lista 'dei controlli inseriti nel form Dim Controllo As Control 'ciclo per scansione di tutte le checkbox For Indice = 1 To 32 'compongo il nome della checkbox da attivare NomeCheckBox = "CheckBoxSensore" & Indice.ToString For Each Controllo In Me.Pannello.Controls If TypeOf Controllo Is CheckBox And Controllo.Name = NomeCheckBox Then Trace.WriteLine(NomeCheckBox.ToString) End If Next Next
|
Praticamente, in un form ho un panel, con al suo interno tante groupbox, e all'interno di una di queste groupbox è situata la checkbox da controllare....
Con il codice che ti ho incollato, come controls vede solo le 32 groupbox e non il suo contenuto
|
|
Neo1986 (Ex-Member)
Pro
Messaggi: 97
Iscritto: 21/06/2010
|
Ho risolto in un'altro modo, ricerco la checkbox tramite un comando apposito
Codice sorgente - presumibilmente VB.NET |
'nome della checkbox da ricercare Dim NomeCheckBox As String = "" 'controllo per la ricerca della checkbox all'interno della lista 'dei controlli inseriti nel form Dim Controllo() As Control 'indice per la scansione delle checkbox Dim Indice As Integer = 0 'scansione delle checkbox For Indice = 1 To 32 'compongo il nome della checkbox da attivare NomeCheckBox = "CheckBoxSensore" & Indice.ToString 'ricerco il nome della checkbox desiderata all'interno della lista dei controlli Controllo = Me.Controls.Find(NomeCheckBox, True) 'controllo se la checkbox è stata trovata if Controllo.Length > 0 Then Trace.WriteLine("TROVATA!") Else Trace.WriteLine("NON TROVATA!") End If Next
|
Ultima modifica effettuata da Neo1986 il 05/07/2010 alle 15:07 |
|
HeDo (Founder Member)
Guru^2
Messaggi: 2765
Iscritto: 21/09/2007
|
Postato originariamente da Neo1986:
dici ? completamente inventato?
ba... mi sembrava così semplice comporre il nome della textbox e con un for scandirle tutte... cmq ho provato come hai detto tu.... ma non capisco perchè non funziona
Praticamente, in un form ho un panel, con al suo interno tante groupbox, e all'interno di una di queste groupbox è situata la checkbox da controllare....
Con il codice che ti ho incollato, come controls vede solo le 32 groupbox e non il suo contenuto |
ovvio, i controls sono gerarchici, devi fare una ricerca ricorsiva all'interno della collection controls, che più correttamente è un albero di controlli
Codice sorgente - presumibilmente C# |
private void ControlTextBoxes(System.Windows.Forms.Control.ControlCollection Container, string sMatchName, bool bEnable) { foreach (Control ctrl in Container) { if (ctrl is TextBox && ctrl. Name. Contains(sMatchName )) ctrl. Enabled = bEnable ; if (ctrl.Controls.Count != 0) ControlTextBoxes(ctrl.Controls, sMatchName, bEnable); } }
|
e lo richiami tipo così:
Codice sorgente - presumibilmente Plain Text |
ControlTextBoxes(this.Controls, "text", false);
|
è C# ma si converte facilmente in VB.NET
EDIT: ho visto ora il tuo post, considera che così gli fai fare ogni volta la scansione dei controlli, è abbastanza uno spreco Ultima modifica effettuata da HeDo il 05/07/2010 alle 15:08 |
|
walker93 (Member)
Expert
Messaggi: 460
Iscritto: 31/01/2010
|
si poteva usare anche la funzione ctype...
Ultima modifica effettuata da walker93 il 05/07/2010 alle 15:56 |
|
HeDo (Founder Member)
Guru^2
Messaggi: 2765
Iscritto: 21/09/2007
|
Postato originariamente da walker93:
si poteva usare anche la funzione ctype... |
dove? |
|