Domanda

Voglio essere in grado di impostare una serie di controlli di una maschera di sola lettura e indietro con un clic del pulsante. C'è un modo per eseguire il ciclo di loro? this.Controls forse ......

Grazie!

È stato utile?

Soluzione

Se si desidera impostare tutti i controlli per sola lettura, si può fare qualcosa di simile:

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

Se ciò che si vuole veramente fare è impostare alcuni dei controlli di sola lettura, io suggerirei di tenere un elenco dei relativi controlli, e poi fare un ForEach in tale elenco, piuttosto che tutti loro.

Altri suggerimenti

Impostazione li Abilita / Disabilita è facile, vedi GWLIosa'a risposta.

Tuttavia, non tutti i controlli hanno una Proprietà di sola lettura. Si potrebbe usare qualcosa come:

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
}

Personalmente avevo messo tutti i controlli (e sotto-controlli) Voglio avere un impatto in una Panel - poi basta cambiare lo stato del singolo Panel. Questo significa che non c'è bisogno di iniziare a memorizzare i vecchi valori (per metterli di nuovo - si potrebbe non voler presumere che tutto è cominciato abilitati, per esempio).

Io suggerirei di usare la proprietà Enabled suggerito da GWLlosa, ma se si desidera o necessità di utilizzare il ReadOnly proprietà, provate questo:

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

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

            if (propInfo != null)
                propInfo.SetValue(ctrl, true, null);
        }
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top