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!

War es hilfreich?

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);
        }
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top