Alternar todos los controles de sólo lectura en el botón Haga clic en WinForm
Pregunta
Quiero ser capaz de establecer un grupo de controles en un formulario de sólo lectura y la espalda con un clic de botón. ¿Hay una forma de bucle a través de ellos? this.Controls
tal vez ......
Gracias!
Solución
Si desea establecer todos los controles de sólo lectura, se puede hacer algo como:
foreach(Control currentControl in this.Controls)
{
currentControl.Enabled = false;
}
Si lo que realmente quiere hacer es configurar algunos de los controles de sólo lectura, sugeriría mantener una lista de los controles pertinentes, y luego hacer un ParaCada en esa lista, en lugar de todos ellos.
Otros consejos
Configuración de ellas activado / desactivado es fácil, véase la respuesta GWLIosa'a.
Sin embargo, no todos los controles tienen una propiedad de sólo lectura. Se podría utilizar algo como:
foreach (Control c in this.Controls)
{
if (c is TextBox)
(c as TextBox).Readonly = newValue;
else if (c is ListBox)
(c as ListBox).Readonly = newValue;
// etc
}
En lo personal me gustaría poner todos los controles (y sub-controles) Quiero impactar en un Panel
- entonces simplemente cambiar el estado de la única Panel
. Esto significa que usted no tiene que comenzar a almacenar los valores antiguos (a ponerlos de nuevo - puede que no desee que asumir que todo comenzó permitieron, por ejemplo).
Te sugiero que utilice la propiedad Enabled sugerido por GWLlosa, pero si desea o necesita utilizar la propiedad de sólo lectura, intente lo siguiente:
foreach (Control ctrl in this.Controls)
{
Type t = ctrl.GetType();
PropertyInfo propInfo = t.GetProperty("ReadOnly");
if (propInfo != null)
propInfo.SetValue(ctrl, true, null);
}