2009-05-26 10 views

Antwort

5

Wenn Sie alle Steuerelemente festlegen möchten nur lesen, können Sie so etwas wie:

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

Wenn das, was Sie wirklich wollen einige der Kontrollen wird nur zu lesen, ich würde vorschlagen, Führen Sie eine Liste der relevanten Kontrollen, und dann eine ForEach auf dieser Liste, anstatt alle von ihnen.

3

Die Einstellung Enabled/Disabled ist einfach, siehe GWLIosa's Antwort.

Allerdings haben nicht alle Steuerelemente eine schreibgeschützte Eigenschaft. Man könnte so etwas wie verwenden:

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

Persönlich würde ich alle Steuerelemente setzen (und Sub-Kontrollen) ich in ein Panel auszuwirken will - dann nur den Zustand der einzelnen Panel ändern. Das bedeutet, dass Sie nicht die alten Werte speichern müssen (um sie zurück zu legen - Sie möchten vielleicht nicht davon ausgehen, dass alle zum Beispiel aktiviert sind).

1

Ich würde vorschlagen, dass Sie die Enabled-Eigenschaft von GWLlosa vorgeschlagen, aber wenn Sie wollen oder müssen die Readonly-Eigenschaft verwenden, versuchen Sie dies:

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

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

      if (propInfo != null) 
       propInfo.SetValue(ctrl, true, null); 
     }