Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - [VB.NET] Da stringa a Name TextBox
Forum - C# / VB.NET - [VB.NET] Da stringa a Name TextBox

Pagine: [ 1 2 3 4 ] Precedente | Prossimo
Avatar
Neo1986 (Ex-Member)
Pro


Messaggi: 97
Iscritto: 21/06/2010

Segnala al moderatore
Postato alle 11:55
Lunedì, 05/07/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

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



Grazie

Ultima modifica effettuata da Neo1986 il 05/07/2010 alle 12:09
PM
Avatar
HeDo (Founder Member)
Guru^2


Messaggi: 2765
Iscritto: 21/09/2007

Segnala al moderatore
Postato alle 12:50
Lunedì, 05/07/2010

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

PM
Avatar
Neo1986 (Ex-Member)
Pro


Messaggi: 97
Iscritto: 21/06/2010

Segnala al moderatore
Postato alle 13:33
Lunedì, 05/07/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?

PM
Avatar
HeDo (Founder Member)
Guru^2


Messaggi: 2765
Iscritto: 21/09/2007

Segnala al moderatore
Postato alle 13:49
Lunedì, 05/07/2010
Testo quotato

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


PM
Avatar
Neo1986 (Ex-Member)
Pro


Messaggi: 97
Iscritto: 21/06/2010

Segnala al moderatore
Postato alle 14:45
Lunedì, 05/07/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

  1. 'controllo per la ricerca della checkbox all'interno della lista
  2.         'dei controlli inseriti nel form
  3.         Dim Controllo As Control
  4.  
  5.         'ciclo per scansione di tutte le checkbox
  6.         For Indice = 1 To 32
  7.  
  8.             'compongo il nome della checkbox da attivare
  9.             NomeCheckBox = "CheckBoxSensore" & Indice.ToString
  10.  
  11.             For Each Controllo In Me.Pannello.Controls
  12.                 If TypeOf Controllo Is CheckBox And Controllo.Name = NomeCheckBox Then
  13.                     Trace.WriteLine(NomeCheckBox.ToString)
  14.                 End If
  15.             Next
  16.  
  17.         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

PM
Avatar
Neo1986 (Ex-Member)
Pro


Messaggi: 97
Iscritto: 21/06/2010

Segnala al moderatore
Postato alle 15:06
Lunedì, 05/07/2010
Ho risolto in un'altro modo, ricerco la checkbox tramite un comando apposito

Codice sorgente - presumibilmente VB.NET

  1. 'nome della checkbox da ricercare
  2.         Dim NomeCheckBox As String = ""
  3.  
  4.         'controllo per la ricerca della checkbox all'interno della lista
  5.         'dei controlli inseriti nel form
  6.         Dim Controllo() As Control
  7.  
  8.         'indice per la scansione delle checkbox
  9.         Dim Indice As Integer = 0
  10.  
  11.         'scansione delle checkbox
  12.         For Indice = 1 To 32
  13.  
  14.             'compongo il nome della checkbox da attivare
  15.             NomeCheckBox = "CheckBoxSensore" & Indice.ToString
  16.  
  17.             'ricerco il nome della checkbox desiderata all'interno della lista dei controlli
  18.             Controllo = Me.Controls.Find(NomeCheckBox, True)
  19.  
  20. 'controllo se la checkbox è stata trovata
  21. if Controllo.Length > 0 Then
  22.  
  23. Trace.WriteLine("TROVATA!")
  24.  
  25. Else
  26.  
  27. Trace.WriteLine("NON TROVATA!")
  28.  
  29. End If
  30.  
  31.         Next


Ultima modifica effettuata da Neo1986 il 05/07/2010 alle 15:07
PM
Avatar
HeDo (Founder Member)
Guru^2


Messaggi: 2765
Iscritto: 21/09/2007

Segnala al moderatore
Postato alle 15:07
Lunedì, 05/07/2010
Testo quotato

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#

  1. private void ControlTextBoxes(System.Windows.Forms.Control.ControlCollection Container, string sMatchName, bool bEnable)
  2.         {
  3.             foreach (Control ctrl in Container)
  4.             {
  5.  
  6.                 if (ctrl is TextBox && ctrl.Name.Contains(sMatchName)) ctrl.Enabled = bEnable;
  7.  
  8.                 if (ctrl.Controls.Count != 0)
  9.                     ControlTextBoxes(ctrl.Controls, sMatchName, bEnable);
  10.             }            
  11.         }



e lo richiami tipo così:

Codice sorgente - presumibilmente Plain Text

  1. 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
PM
Avatar
walker93 (Member)
Expert


Messaggi: 460
Iscritto: 31/01/2010

Segnala al moderatore
Postato alle 15:55
Lunedì, 05/07/2010
si poteva usare anche la funzione ctype...

Ultima modifica effettuata da walker93 il 05/07/2010 alle 15:56
PM
Avatar
HeDo (Founder Member)
Guru^2


Messaggi: 2765
Iscritto: 21/09/2007

Segnala al moderatore
Postato alle 15:57
Lunedì, 05/07/2010
Testo quotato

Postato originariamente da walker93:

si poteva usare anche la funzione ctype...



dove?

PM
Pagine: [ 1 2 3 4 ] Precedente | Prossimo