/ / Criar um loop foreach apenas para todos os controles em um GroupControl - c #, winforms, devexpress

Criar um loop foreach apenas para todos os controles em um GroupControl - c #, winforms, devexpress

Eu tenho um formulário que contém um GroupControl neste GroupControl, existem alguns controles.

Eu quero quando clico em um botão para alterar as propriedades desses controles para control.Properties.ReadOnly = false;

Então eu criei este código:

      foreach (TextEdit te in InformationsGroupControl.Controls)
{
te.Properties.ReadOnly = false;
}

foreach (TextEdit te in InformationsGroupControl.Controls)
{
te.Properties.ReadOnly = false;
}
foreach (DateEdit de in InformationsGroupControl.Controls)
{
de.Properties.ReadOnly = false;
}
foreach (ComboBoxEdit cbe in InformationsGroupControl.Controls)
{
cbe.Properties.ReadOnly = false;
}
foreach (MemoEdit me in InformationsGroupControl.Controls)
{
me.Properties.ReadOnly = false;
}
foreach (CheckEdit ce in InformationsGroupControl.Controls)
{
ce.Properties.ReadOnly = false;
}

Isso funcionou, mas tenho que criar um loop foreach para cada controle.

Eu também tentei isso

foreach (Control control in InformationsGroupControl.Controls)
{
control.Properties.ReadOnly = false;
}

Mas System.Windows.Forms.Control não contém uma definição para "Propriedades"

Como posso criar apenas um loop foreach para todos os controles em um GroupControl?

Respostas:

2 para resposta № 1

Parece que você está usando um grupo de controles que todos derivam da mesma BaseClass. Isso é BaseClass, BaseEdit?

Se sim, faça isso ...

foreach(object control in InformationsGroupControl.Controls)
{
BaseEdit editableControl = control as BaseEdit;
if(editableControl != null)
editableControl.Properties.ReadOnly = false;
}

Eu estou fazendo este palpite a partir deste link (tem controles como o que você está usando). http://documentation.devexpress.com/#WindowsForms/DevExpressXtraEditorsBaseEditMembersTopicAll


1 para resposta № 2

Eu preferiria a abordagem da classe base. Mas desde que você disse que apenas alguns tipos precisam ser "ReadOnly = false", você pode fazer algo parecido com isto

foreach (Control c in InformationsGroupControl.Controls)
{
if(c is TextEdit || c is DateEdit || c is ComboBoxEdit || c is MemoEdit || c is CheckEdit)
(c as BaseEdit).Properties.ReadOnly = false;
}

0 para resposta № 3

incluide linq.

use o seguinte código:

foreach (var edit in InformationsGroupControl.Controls.OfType<BaseEdit>())
{
edit.Properties.ReadOnly = false;
}