将控件的属性名称传递给函数

NES*_*HOM 0 c# controls properties function

我有一个函数可以根据控件名称和输入命令更改控件的属性。

 public void SetControl(string ControlName, string Operation)
    {
        Control Control = this.Controls.Find(ControlName, true)[0];

        switch (Operation)
        {
            case "ok":
                Control.BackColor = Color.Green;
                Control.ForeColor = Color.Black;
                break;
            case "error":
                Control.BackColor = Color.Red;
                Control.ForeColor = Color.Blue;
                break;
        }
    }
Run Code Online (Sandbox Code Playgroud)

现在我想知道是否还有什么方法可以传递属性名称?当然我可以做这样的事情:

if (propertyname=="ForeColor")
 {Control.ForeColor = Color.Black;}
Run Code Online (Sandbox Code Playgroud)

但我应该对我要更改的所有属性执行此操作!有没有办法根据名称查找并更改属性?

Dav*_*d L 5

是的。这正是反射的作用。

var value = Control.GetType().GetProperty(propertyname).GetValue(Control, null);
Run Code Online (Sandbox Code Playgroud)

然后设置你的值

Control.GetType().GetProperty(propertyname).SetValue(Control, valueToSet);
Run Code Online (Sandbox Code Playgroud)