Question

Je veux être en mesure de mettre un tas de contrôles sur un formulaire en lecture seule et à l'arrière avec un bouton clic. Y at-il un moyen de boucle à travers eux? this.Controls peut-être ......

Merci!

Était-ce utile?

La solution

Si vous voulez régler tous les contrôles de lecture seule, vous pouvez faire quelque chose comme:

foreach(Control currentControl in this.Controls)
{
    currentControl.Enabled = false;
}

Si ce que vous voulez vraiment faire est de définir certains des contrôles de lecture seule, je vous suggère de tenir une liste des contrôles pertinents, et puis en faisant un ForEach sur cette liste, plutôt que tous.

Autres conseils

Réglage les Activé / Désactivé est facile, voir la réponse GWLIosa'a.

Cependant, tous les contrôles ont pas une propriété en lecture seule. Vous pouvez utiliser quelque chose comme:

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
}

Personnellement, je mettrais toutes les commandes (et des sous-contrôles) Je veux avoir un impact dans un Panel - puis juste changer l'état du Panel unique. Cela signifie que vous ne devez pas commencer à stocker les anciennes valeurs (pour les remettre - vous ne voulez pas supposer qu'ils ont tous commencé activés, par exemple).

Je vous suggère d'utiliser la propriété Activé suggérée par GWLlosa, mais si vous voulez ou devez utiliser la propriété ReadOnly, essayez ceci:

        foreach (Control ctrl in this.Controls)
        {
            Type t = ctrl.GetType();

            PropertyInfo propInfo = t.GetProperty("ReadOnly");

            if (propInfo != null)
                propInfo.SetValue(ctrl, true, null);
        }
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top