1

我有这个代码:

typeof(ComboBox).GetProperty("SelectedItem").SetValue("comboBox1", "", null);

它不工作。这是错误:

“对象与目标类型不匹配”

怎么了?

更新:

我有我的对象的名称(字符串中的组合框。如:

string []s = new s[3];
s[0]="comboBox0"; 
s[1]="comboBox1"; 
s[2]="comboBox2"; 

我想为我的 comboBox 的属性 SelectedItem 设置一个值s[i]。我该怎么做?

4

4 回答 4

1

SetValue需要有ComboBox对象,而不是字符串“comboBox1”。我相信您的应用程序中有一个 ComboxBox 对象,假设:

ComboBox comboBox1 = ....;

所以你可以打电话:

typeof(ComboBox).GetProperty("SelectedItem")
                .SetValue(comboBox1, "", null);

如果你使用 .NET 4.5,你可以去掉最后一个输入:

typeof(ComboBox).GetProperty("SelectedItem")
                .SetValue(comboBox1, "");

编辑:根据您的评论,您不需要使用反射,下面是您只要知道名称就可以获得combox1:

var comboBox1 = Controls.OfType<ComboBox>()
                      .SingleOrDefault(c => c.Name == "Combobox1");

comboBox1.SelectedItem = "";
于 2012-10-24T10:10:04.117 回答
1

您发送到的第一个参数是PropertyInfo.SetValue您要设置值的对象。例如,如果您将 ComboBox 对象命名为,comboBox1那么您必须从更改SetValue("comboBox1", "", null);SetValue(comboBox1, "", null);

您可以阅读有关PropertyInfo.SetValue Method的更多信息。

于 2012-10-24T10:13:29.597 回答
1

SetValue方法需要3个参数,MSDN第一个参数是实例对象,第二个是值,第三个是索引属性的索引,如果不使用则设置为null。

所以

var box = <method to get combobox1>;
typeof(ComboBox).GetProperty("SelectedItem").SetValue(box,"",null);
于 2012-10-24T10:14:52.200 回答
1

在放置 ComboBox 的表单中,添加以下方法:

public void SetComboBoxValue(string comboBoxName, string value)
{
    ComboBox foundCombo = Controls.OfType<ComboBox>().SingleOrDefault(c => c.Name == comboBoxName) as ComboBox;
    if (foundCombo == null)
        return;
    foundCombo.SelectedItem = value;
}
于 2012-10-24T14:07:15.637 回答