我有一个包含GroupControl的表单,在这个GroupControl中有一些控件。
我希望当我点击按钮将thos控件的属性更改为control.Properties.ReadOnly = false;
所以我创建了这段代码:
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;
}
这是有效的,但我必须为每个控件创建一个foreach循环。
我也试过这个
foreach (Control control in InformationsGroupControl.Controls)
{
control.Properties.ReadOnly = false;
}
但是System.Windows.Forms.Control不包含'Properties'的定义
如何为GroupControl中的所有控件创建一个唯一的foreach循环?
答案 0 :(得分:2)
您看起来像是在使用一组控件,这些控件都来自同一个BaseClass。那是BaseClass,BaseEdit吗?
若然,请这样做......
foreach(object control in InformationsGroupControl.Controls)
{
BaseEdit editableControl = control as BaseEdit;
if(editableControl != null)
editableControl.Properties.ReadOnly = false;
}
我正在通过此链接进行猜测(它具有与您正在使用的控件类似的控件)。 http://documentation.devexpress.com/#WindowsForms/DevExpressXtraEditorsBaseEditMembersTopicAll
答案 1 :(得分:1)
我更喜欢基类方法。但既然你说只有少数类型需要'ReadOnly = false',你可以这样做
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;
}
答案 2 :(得分:0)
包括linq。
使用以下代码:
foreach (var edit in InformationsGroupControl.Controls.OfType<BaseEdit>())
{
edit.Properties.ReadOnly = false;
}