一个Panel上 有多个控件
其中有些用户控件 有些自定义的属性
现在想遍历这个Panel上的所有控件 并访问其属性
Foreach(Control c in Panel.Controls)
{
c.
}这里访问不到这个c原来应该有的属性譬如这个c是一个label的时候 他应该有Text属性 但访问不了
再譬如遍历到这个c是我的一个用户控件的时候 c应该有一个isControl的属性 但是也访问不了请大大们指教
其中有些用户控件 有些自定义的属性
现在想遍历这个Panel上的所有控件 并访问其属性
Foreach(Control c in Panel.Controls)
{
c.
}这里访问不到这个c原来应该有的属性譬如这个c是一个label的时候 他应该有Text属性 但访问不了
再譬如遍历到这个c是我的一个用户控件的时候 c应该有一个isControl的属性 但是也访问不了请大大们指教
{
c.Text貌似这样就ok
}
问题是,我预先是不知道他是label 他可能是其他控件 我要每个类型都做一次foreach吗?
{
if(c is Label)
((Label)c).Text;
if(c is YourControl)
((YourControl)c).isControl;
//你先将看看c是否可以转换成你希望处理的类型,然后再处理
}
public void getPropertyValue(Control container)
{
string[] propertyNames = { "Text", "Value", "Name" }; //想要取得的属性名称
Type typeCtr = null;
object obj = null;
System.Reflection.PropertyInfo p = null;
StringBuilder sbResult = new StringBuilder(); foreach (Control ctr in container.Controls)
{
typeCtr = ctr.GetType();//取得控件的类别
foreach (string str in propertyNames)
{
p = typeCtr.GetProperty(str); //取得指定名称的属性
if (p != null)
{
obj = p.GetValue(ctr, null); //取得属性对应的值
sbResult.AppendLine(string.Format("控件 {0} 的属性 {1} 的值为:{2}", ctr.Name, p.Name, obj)); //输出结果
}
}
} MessageBox.Show(sbResult.ToString());
} private void button1_Click(object sender, EventArgs e)
{
getPropertyValue(this);
}
For i = 0 To parent.Controls.Count - 1 Step i + 1
If TypeOf parent.Controls(i) Is TextBox Then
CType(parent.Controls(i), TextBox).Text = ""
End If
Next