Toggle tutti i controlli di sola lettura sul pulsante Fare clic nella WinForm
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!
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);
}