【问题标题】:ComboBox reflection in c#C#中的组合框反射
【发布时间】:2012-10-24 22:07:15
【问题描述】:

我有这个代码:

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

它不工作。这是错误:

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

怎么了?

更新:

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

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

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

【问题讨论】:

    标签: c# combobox


    【解决方案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 = "";
    

    【讨论】:

    • @Chanipoz:不明白,你能解释一下吗?
    • 我有一个字符串,其名称为组合框,例如:s="comboBox1",如何为其设置值?
    【解决方案2】:

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

    您可以在PropertyInfo.SetValue Method 上阅读更多内容。

    【讨论】:

      【解决方案3】:

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

      所以

      var box = <method to get combobox1>;
      typeof(ComboBox).GetProperty("SelectedItem").SetValue(box,"",null);
      

      【讨论】:

        【解决方案4】:

        在放置 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;
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-04-22
          • 2021-07-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-07-26
          • 1970-01-01
          相关资源
          最近更新 更多