Acceso a propiedades de controles
en la colecci�n Controls

Fecha: 19/Jul/2004 (17 de julio 2004)
Actualizado 21/Jul/2004
Autor: Javier Pelaez
Mail: [email protected]

 


El siguiente c�digo va en respuesta a una petici�n SOS de panorama Box, de Joan Carles Bay�s:

Puedo utilizar una instrucci�n como esta para modificar las propiedades de un control:

foreach(System.Windows.Forms.Control control in this.tabPage01.Controls)
if(Object.ReferenceEquals(control.GetType(),this.textBox.GetType()))
{ ...... Como puedo referenciar la propiedad ReadOnly de un controle TextBox }

Si no se puede hacer, me gustar�a hacer algo similar, sin referenciar directamente los controles (textBox.ReadOnly = true)

 

Si lo que se desea es modificar alguna propiedad de todos los controles de un determinado tipo (por ejemplo, todos los TextBox), puedes hacer lo siguiente:

Visual Basic

	Dim c As Control
	For Each c  In Me.TabPage1.Controls
		If c.GetType Is Me.txt1.GetType Then
			DirectCast(c, TextBox).ReadOnly = True
		End If
	Next

C#

	foreach (Control c in this.tabPage1.Controls)
	{
		if (c is TextBox)
		{
			((TextBox)c).ReadOnly=true;
		}
	}
Lo que hace es recorrer la colecci�n de controles verificando si el tipo de cada controles TextBox ( c.GetType Is Me.txt1.GetType, c is TextBox). Si se cumple eso, se debe hacer una conversi�n a dicho tipo para poder acceder a las propiedades que son exclusivas de la clase TextBox (DirectCast(c, TextBox)) . Finalmente, utilizas la propiedad deseada.

En cambio si lo que se quiere es ubicar un control en espec�fico, una opci�n es la siguiente:

Visual Basic

	Dim c As Control
	For Each c In Me.TabPage1.Controls
		If c Is Me.txt1 Then
			DirectCast(c, TextBox).ReadOnly = True
		End If
	Next

C#

	foreach (Control c in this.tabPage1.Controls)
	{
		if (c ==this.txt1)
		{
			((TextBox)c).ReadOnly=true;
		}
	}
La diferencia aqu� es que en lugar de preguntar por el tipo del control, se pregunta si la instancia es la misma que la del control espec�fico que se desea buscar (c Is Me.txt1, c==this.txt1) . Luego se realiza lo mismo que antes, y salimos del loop debido a que ya no se
desea seguir recorriendo la colecci�n (ya se ha encontrado lo que se buscaba).

NOTA: no alcanzo a entender para que necesitas realizar esto �ltimo, dado que si cuentas con la referencia directa del TextBox,
no veo la necesidad de buscarlo en la colecci�n de controles.


ir al ndice