1

私はこのコードを持っています:

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

動作していません。エラーは次のとおりです。

「オブジェクトがターゲットタイプと一致しません」

なにが問題ですか?

アップデート:

私は自分のオブジェクトの名前を持っています(文字列のコンボボックス。次のように:

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

プロパティSelectedItemの値をcomboBoxに設定したいと思いますs[i]。どうすればいいですか?

4

4 に答える 4

1

SetValueメソッドには 3 つのパラメーターが必要です。MSDNの最初のパラメーターはインスタンス オブジェクト、2 番目のパラメーターは値、3 番目のパラメーターはインデックス付きプロパティのインデックスで、使用しない場合は 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 に答える
1

SetValueComboBox文字列「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 メソッドを参照してください。

于 2012-10-24T10:13:29.597 に答える