2 votes

Basculer tous les contrôles en lecture seule en cas de clic sur un bouton dans WinForm

Je veux pouvoir faire passer un ensemble de contrôles d'un formulaire en lecture seule et revenir en arrière en cliquant sur un bouton. Existe-t-il un moyen de les parcourir en boucle ? this.Controls peut-être......

Merci !

5voto

GWLlosa Points 10701

Si vous voulez mettre TOUS les contrôles en lecture seule, vous pouvez faire quelque chose comme :

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

Si ce que vous voulez vraiment faire, c'est définir CERTAINES des commandes en lecture seule, je vous suggère de conserver une liste des commandes concernées, puis de faire un ForEach sur CETTE liste, plutôt que sur toutes les commandes.

3voto

Henk Holterman Points 153608

Les activer/désactiver est facile, voir la réponse de GWLIosa.

Cependant, tous les contrôles ne disposent pas d'une propriété de lecture seule. Vous pourriez 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
}

2voto

Marc Gravell Points 482669

Personnellement, je placerais tous les contrôles (et sous-contrôles) que je souhaite influencer dans un fichier de type Panel - alors il suffit de changer l'état de l'unique Panel . Cela signifie que vous ne devez pas commencer à stocker les anciennes valeurs (pour les remettre en place - vous ne voudrez peut-être pas supposer qu'elles ont toutes été activées, par exemple).

1voto

Crispy Points 3341

Je vous suggère d'utiliser la propriété Enabled 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);
        }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X