【问题标题】:Set Control Properties using strings C#使用字符串 C# 设置控件属性
【发布时间】:2025-12-23 19:50:06
【问题描述】:

我目前正在编写一个允许我自定义表单元素的库。下面的代码是一个函数,它获取控件的名称,获取属性的名称,然后设置控件的属性,但由于某种原因我似乎无法让它工作。感谢任何帮助。

代码:

public void SetProp(string name, string prop, string value)
    {
        Form FormControl = Application.OpenForms[form];
        Control mycontrol = FormControl.Controls.Find(name, true)[0];

        PropertyInfo pInfo = mycontrol.GetType().GetProperty(prop);
        TypeConverter tc = TypeDescriptor.GetConverter(pInfo.PropertyType);
        var x = tc.ConvertFromString(value);
        pInfo.SetValue(name, x, null);
    }

示例调用:

 SetProp("greg", "Text", "hi") 

【问题讨论】:

  • pInfo.SetValue() 看起来不对。你应该传入mycontrol,而不是name。试试pInfo.SetValue(mycontrol, x);
  • @TyCobb 是的,解决了这个问题。非常感谢!

标签: c# winforms properties controls


【解决方案1】:

您需要将实际的源对象传递给PropertyInfo.SetValue 调用,以便实际修改它。 PropertyInfo 基本上只是关于属性的信息(因此得名),它与该特定实例没有任何附件。

你可以像这样改变你的调用来让它工作:

pInfo.SetValue(mycontrol, x);

http://msdn.microsoft.com/en-us/library/hh194291(v=vs.110).aspx

【讨论】: