Proprietà index per i controlli di una windows form

mercoledì 28 gennaio 2009 - 12.08

LLL Profilo | Newbie

Salve a tutti,
da un po' di tempo cercavo il modo di enumerare in vb.net 2003 in modo automatico una serie di controlli del mio form, per assegnargli delle proprietà in un ciclo senza doverle scrivere in modo esplicito per tutti quanti.
Ad esempio invece che scrivere per 50 textbox:

textbox1.text=1
textbox2.text=2
textbox3.text=3
...ecc.

scrivere con un ciclo:

for i =1 to 50
textbox(i).text = i
next i

La scrittura textbox(i) però non è accettata da vb.net e non ho trovato nessun altro tipo di carattere che funzioni a questo scopo al posto delle parentesi ($,%,[,...). Un carattere escape di questo tipo esiste quasi in ogni linguaggio di programmazione e mi sembra strano che non ci sia in vb.net, in ogni caso, non trovandolo, ho provato un comando alternativo:

For k = 1 To 3
Me.Controls.Item(k).text = k
Next k

Questo comando funziona a patto che l'indice k sia il valore dell'indice associato all'oggetto.
Il problema è che riesco a recuperare l'indice ma non ad impostarlo, ovvero per sapere che indice è associato, ad esempio, alla textbox1, posso farmi stampare da qualche parte il valore:

Me.Controls.IndexOf(textbox1)

ma dovrei farlo per ogni textbox e la cosa chiaramente vanifica lo scopo della mia automazione.

Qualcuno sa se quest'indice si trova nella finestra di progettazione o se è possibile assegnarlo in qualche modo?
Grazie per l'aiuto,
LLL




rossimarko Profilo | Guru

Ciao,

prova eventualmente a crearti un dictionary di controlli che conterrà come chiave il nome del controllo e come valore il riferimento
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

alexmed Profilo | Guru

Ciao
Questo codice io lo uso per cancellare il testo su tutte le TextBox presenti sul Form con particolare attenzione che se queste TextBox sono sia sul Form che all'interno di un'altro controllo (ad es. un GroupBox) quelle all'interno del controllo non le vede.

For Each ctl As Control In Me.Controls
If TypeOf ctl Is TextBox = True Then
MsgBox(ctl.Name)
End If
Next ctl

Se invece devi controllare solo alcune TextBox potresti indicare un'eventuale condizione del tipo

For Each ctl As Control In Me.Controls
If TypeOf ctl Is TextBox = True Then
If ctl.Name.StartsWith("pippo") Then
ctl.Text = ""
End If
End If
Next ctl

Quindi imposterai il nome delle TextBox da controllare con .Name = pippoQualcosa

Cosa ne dici?

Ciao
alexmed
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5