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 № 1Parece 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;
}