获取控件的“value”属性

时间:2017-11-11 20:18:39

标签: c# winforms

我有一个Control参数的方法。我想得到控件的价值。因此,如果它是TextBox获取Text属性的值;如果它是NumericUpDown获取Value属性的值,依此类推。

问题是我不能写这样的东西:

Method(Control control)
{
    control.Text;
}

Method(Control control)
{
    control.Value;
}

因为不能保证控件具有这些属性之一,如果它具有它,它的名称是什么。 有没有办法做这样的事情?

1 个答案:

答案 0 :(得分:3)

Value课程中没有这样的常见Control属性。

您应该使用一些if / else或switch / case或字典方法从控件中获取值。因为你知道你需要什么属性。控件只提供属性。

例如对于ComboBox,值是多少?是SelectedItemSelectedIndexSelectedValueText吗?它的用法/意见基础。

最接近你要找的东西,就是依靠控件的DefaultProperty属性来使用relfection从该属性中获取值。例如,使用此方法:

public object GetDefaultPropertyValue(Control c)
{
    var defaultPropertyAttribute = c.GetType().GetCustomAttributes(true)
        .OfType<DefaultPropertyAttribute>().FirstOrDefault();
    var defaultProperty = defaultPropertyAttribute.Name;
    return c.GetType().GetProperty(defaultProperty).GetValue(c);
}

你可以通过这种方式获得价值:

var controls = new List<Control> {
    new Button() { Text = "button1" },
    new NumericUpDown() { Value = 5 },
    new TextBox() { Text = "some text" },
    new CheckBox() { Checked = true }
};

var values = controls.Select(x => GetDefaultPropertyValue(x)).ToList();