gpt4 book ai didi

c# - 在运行时获取对象的成员

转载 作者:太空宇宙 更新时间:2023-11-03 13:59:21 25 4
gpt4 key购买 nike

我有一个情况,不知道我的做法是否正确,请指导我解决这个问题。假设我有一个 Panel 控件,其中包含许多控件,在运行时,我通过使用对该面板中的每个控件执行了一次迭代Panel1.Controls 属性,现在,在这些控件中,它们可以是任何东西 TextBoxButtonDropDown 等。现在我想在运行时查找哪个控件属于哪种类型,然后查找该控件中是否包含任何特定属性以及是否存在该属性而不是设置该属性的值。我想我必须在这里使用 Reflection 做一些事情,但不知道从哪里开始。

示例代码:

 foreach (Control cntrl in Panel1.Controls)
{
//find type of the control
// find any specific property's existence in that control
// if property exists than set value of that property
}

也欢迎任何其他更相关的方法,以便在运行时执行此任务。

对不起,我忘了说我不想在这里使用 is 关键字,因为控件有多种类型,我想创建一个全局函数,可以在不知道该面板中存在的控件类型的情况下用于任何面板.

提前致谢。

最佳答案

通过使用反射,您可以实现这一点。

获取属性的元数据,然后设置它。这将允许您检查该属性是否存在,并验证它是否可以设置:

foreach (Control cntrl in Panel1.Controls)
{
PropertyInfo prop = cntrl.GetType().GetProperty("Name", BindingFlags.Public | BindingFlags.Instance);
if(null != prop && prop.CanWrite)
{
prop.SetValue(cntrl, "MyName", null);
}
}

如果你不想使用反射,也可以试试这个

foreach (Control cntrl in Panel1.Controls)
{
if(cntrl is TextBox)
{
TextBox txt = (TextBox)ctrl;
txt.Text = "Your value here";
// your textbox code here
}
else if(cntrl is DropDown)
{
// your DropDown code here
}
if(cntrl is Button)
{
// your Button code here
}
}

注意: is 关键字检查对象是否与给定类型兼容。例如,下面的代码可以确定一个对象是 MyObject 类型的实例,还是派生自 MyObject 的类型:

关于c# - 在运行时获取对象的成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11078624/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com