Necesito, por ejemplo, una forma de desactivar todos los botones en un formulario o validar todos los datos de las cajas de texto. ¿Algunas ideas? ¡Gracias por adelantado!¿Cómo puedo obtener todos los controles de un formulario que incluye controles en cualquier contenedor?
5
A
Respuesta
22
La opción más simple puede ser la de la cascada:
public static void SetEnabled(Control control, bool enabled) {
control.Enabled = enabled;
foreach(Control child in control.Controls) {
SetEnabled(child, enabled);
}
}
o similares; Por supuesto podría pasar a un delegado para que sea bastante genérico:
public static void ApplyAll(Control control, Action<Control> action) {
action(control);
foreach(Control child in control.Controls) {
ApplyAll(child, action);
}
}
entonces cosas como:
ApplyAll(this, c => c.Validate());
ApplyAll(this, c => {c.Enabled = false; });
3
Proveedores:
public List<Control> getControls(string what, Control where)
{
List<Control> controles = new List<Control>();
foreach (Control c in where.Controls)
{
if (c.GetType().Name == what)
{
controles.Add(c);
}
else if (c.Controls.Count > 0)
{
controles.AddRange(getControls(what, c));
}
}
return controles;
}
private void Form1_Load(object sender, EventArgs e)
{
var c = getControls("Button", this);
}
4
que prefieren un enfoque perezoso (repetidor) a el problema, así que esto es lo que uso:
/// <summary> Return all of the children in the hierarchy of the control. </summary>
/// <exception cref="ArgumentNullException"> Thrown when one or more required arguments are null. </exception>
/// <param name="control"> The control that serves as the root of the hierarchy. </param>
/// <param name="maxDepth"> (optional) The maximum number of levels to iterate. Zero would be no
/// controls, 1 would be just the children of the control, 2 would include the children of the
/// children. </param>
/// <returns>
/// An enumerator that allows foreach to be used to process iterate all children in this
/// hierarchy.
/// </returns>
public static IEnumerable<Control> IterateAllChildren(this Control control,
int maxDepth = int.MaxValue)
{
if (control == null)
throw new ArgumentNullException("control");
if (maxDepth == 0)
return new Control[0];
return IterateAllChildrenSafe(control, 1, maxDepth);
}
private static IEnumerable<Control> IterateAllChildrenSafe(Control rootControl,
int depth,
int maxDepth)
{
foreach (Control control in rootControl.Controls)
{
yield return control;
// only iterate children if we're not too far deep and if we
// actually have children
if (depth >= maxDepth || control.Controls.Count == 0)
continue;
var children = IterateAllChildrenSafe(control, depth + 1, maxDepth);
foreach (Control subChildControl in children)
{
yield return subChildControl;
}
}
}
0
He estado buscando una solución para la misma para habilitar/deshabilitar los controles basados en el tipo, así que se me ocurrió este enfoque similar al de Luiscencio (también puede modificarlo para obtener todos los controles o cambiar otras propiedades).
public static void setEnabled (ControlCollection cntrList ,bool enabled,List<Type> typeList = null)
{
foreach (Control cntr in cntrList)
{
if (cntr.Controls.Count == 0)
if (typeList != null)
{
if (typeList.Contains(cntr.GetType()))
cntr.Enabled = enabled;
}
else
cntr.Enabled = enabled;
else
setEnabled(cntr.Controls, enabled, typeList);
}
}
public void loadFormEvents()
{
List<Type> list = new List<Type>();
list.Add(typeof(TextBox));
setEnabled(frm.Controls ,false,list);
}
Cuestiones relacionadas
- 1. Cómo recorrer todos los controles en un formulario, incluidos los controles en un subformulario - Access 2007
- 2. ¿Cómo puedo obtener los controles de botón en el formulario de Windows - Panel
- 3. Deshabilitar todos los controles de formulario en una página web
- 4. Cómo duplicar los controles .NET de buffer en un formulario?
- 5. ¿WPF tiene controles equivalentes para todos los controles de Winforms?
- 6. Cómo orientar todos los controles (Estilos WPF)
- 7. Buscar todos los controles que son visibles para el usuario
- 8. Cómo convertir todos los controles en un formulario web aspx a un equivalente de solo lectura
- 9. WPF: cambiar la fuente de todos los controles en un contenedor dado
- 10. ¿Cómo obtengo todos los controles de un formulario en Windows Forms?
- 11. Silverlight: Encuentre todos los controles de tipo en diseño
- 12. Cómo insertar los mejores controles acoplados debajo de los controles acoplados superiores previewsly en un panel
- 13. VB.NET - Iteración a través de controles en un objeto contenedor
- 14. ¿Cómo elimino todos los controles en un panel o formulario a la VEZ? C#
- 15. ¿Encontrar todos los controles en un panel de ASP.NET?
- 16. ¿Cómo puedo eliminar dinámicamente todos los controles en un control de usuario?
- 17. Pasa por todos los controles de usuario en una página
- 18. Hacer todos los controles en un formulario de solo lectura de una vez
- 19. Un controlador de eventos para todos los controles en el formulario
- 20. ¿Cuál es la mejor manera de borrar todos los controles en un formulario C#?
- 21. ¿Cómo puedo eliminar los controles estándar en un OpenLayers-Map?
- 22. Deshabilitar todos los controles dentro de div en asp.net
- 23. Método genérico para encontrar todos los controles TextBox en Silverlight
- 24. Suscribirse a eventos de mouse de todos los controles en el formulario
- 25. ¿Cómo desactivo todos los controles en la página ASP.NET?
- 26. Cómo agregar controles mediante programación a un formulario en VB.NET
- 27. Obtener todos los controles Web de un tipo específico en una página
- 28. WPF: ¿Cómo recorro todos los controles en una ventana?
- 29. Excel VBA: Obtención de los valores de controles de formulario
- 30. Cómo agregar controles dinámicamente al formulario ASP.NET?
Realmente no responde la pregunta del título - cómo obtener todos los controles - no edita sus propiedades. – n00dles
@ n00dles para citar la pregunta: "Necesito, por ejemplo, desactivar todos los botones en un formulario" –
Después de escribir el comentario, pensé ... tal vez es el título que necesita edición. Estaba un poco irritado porque estaba buscando una respuesta a la pregunta del título. Hecho sin embargo, sin embargo. (De un _Marc_ a otro!) – n00dles