Alle ein- Kontrollen Read-Only auf Button-Klick in WinForm
Frage
Ich möchte in einem Formular eine Reihe von Kontrollen einstellen können, Read-Only und zurück mit einem Klick. Gibt es eine Möglichkeit, um eine Schleife durch sie? this.Controls
vielleicht ......
Danke!
Lösung
Wenn Sie alle Steuerelemente festlegen möchten nur lesen, man kann so etwas tun:
foreach(Control currentControl in this.Controls)
{
currentControl.Enabled = false;
}
Wenn das, was Sie wirklich wollen, um einige der Kontrollen festgelegt ist nur zu lesen, würde ich vorschlagen, eine Liste der relevanten Kontrollen zu halten, und dann eine ForEach auf dieser Liste zu tun, und nicht alle von ihnen.
Andere Tipps
Einstellen sie aktiviert / deaktiviert ist einfach, siehe GWLIosa'a Antwort.
Allerdings sind nicht alle Kontrollen haben einen Read-only-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
}
Persönlich würde ich alle Steuerelemente setzen (und Sub-Kontrollen) ich in einen Panel
auszuwirken will - dann nur den Zustand des einzelnen Panel
ändern. Das heißt, Sie müssen nicht anfangen, die alten Werte zu speichern (sie zurück zu setzen - Sie könnten nicht fingen sie alle an zu übernehmen wollen aktiviert, zum Beispiel).
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);
}