Oppure

Loading
Questo topic e' stato chiuso dal moderatore.
05/07/10 9:55
Neo1986
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

For Indice = 1 to 120
Me.TextBoxCom + Indice.tostring.Enable = False
Next


Grazie
Ultima modifica effettuata da Neo1986 05/07/10 10:09
aaa
05/07/10 10:50
HeDo

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 :)
aaa
05/07/10 11:33
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?
aaa
05/07/10 11:49
HeDo
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 :)

aaa
05/07/10 12:45
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

'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
aaa
05/07/10 13:06
Neo1986
Ho risolto in un'altro modo, ricerco la checkbox tramite un comando apposito

'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 05/07/10 13:07
aaa
05/07/10 13:07
HeDo
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 :)



        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ì:


            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 05/07/10 13:08
aaa
05/07/10 13:55
walker93
si poteva usare anche la funzione ctype...
Ultima modifica effettuata da walker93 05/07/10 13:56
aaa