Alternar todos os controles Read-Only no botão Clique no WinForm
Pergunta
Eu quero ser capaz de definir um monte de controles em um formulário para Read-Only e volta com um clique de botão. Existe uma maneira para fazer um loop através deles? this.Controls
talvez ......
Obrigado!
Solução
Se você quiser definir todos os controlos apenas para ler, você pode fazer algo como:
foreach(Control currentControl in this.Controls)
{
currentControl.Enabled = false;
}
Se o que você realmente quer fazer é definir alguns dos controles apenas para ler, eu sugiro manter uma lista dos controles relevantes, e, em seguida, fazendo um ForEach nessa lista, ao invés de todos eles.
Outras dicas
Configuração-los ativado / desativado é fácil, ver a resposta GWLIosa'a.
No entanto, nem todos os controles têm uma propriedade somente leitura. Você poderia usar algo como:
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
}
Pessoalmente eu colocar todos os controles (e sub-controles) Eu quero impacto em um Panel
- em seguida, basta alterar o estado do único Panel
. Isto significa que você não tem que começar a armazenar os valores antigos (para colocá-los de volta - você pode não querer assumir todos eles começaram habilitado, por exemplo).
Eu sugiro que você use a propriedade Enabled sugerido por GWLlosa, mas se você quer ou precisa usar a propriedade ReadOnly, tente o seguinte:
foreach (Control ctrl in this.Controls)
{
Type t = ctrl.GetType();
PropertyInfo propInfo = t.GetProperty("ReadOnly");
if (propInfo != null)
propInfo.SetValue(ctrl, true, null);
}