2009-05-26 7 views

Répondre

5

Si vous souhaitez définir 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 garder une liste des contrôles pertinents, puis faire un ForEach sur cette liste, plutôt que chacun d'eux.

3

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

Toutefois, tous les contrôles n'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 
} 
2

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 n'avez pas besoin de commencer à stocker les anciennes valeurs (pour les remettre - vous ne voudrez peut-être pas supposer qu'elles ont toutes été activées, par exemple).

1

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); 
     } 
Questions connexes