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!

Foi útil?

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);
        }
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top