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!

¿Fue útil?

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);
        }
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top