私は単に解決できない問題を抱えています。何時間も研究してきましたが、結果はありません。助けてください!
私がやろうとしていること:
フォームにクラスをリストするユーザー コントロールがあり、誰かがリストで別の項目を選択した場合にメイン フォームに変更を加えたいと考えています。
だから私はイベントを作成しました:
private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
if (listBox1.SelectedIndex != -1)
{
Object item = this.List.GetType().GetProperty("Item").GetValue(this.List, new Object[] { listBox1.SelectedIndex });
Control a = this.TopLevelControl;
Object temp = a.GetType().GetProperty("currentExpression").GetValue( a, null );
a.GetType().GetProperty("currentExpression").SetValue(temp, item, null);
}
}
このコードでは、「a」がメイン フォームを保持します。(そして、このイベントはユーザー コントロールで実行されます) 必要なものはすべて揃っています。
List オブジェクトは式のリストです。メイン フォームの currentExpression プロパティは Expression です。
プロパティ currentExpression (MainForm の Expression) に Expression ( item と呼びます) を配置したいと考えています。しかし、常に「オブジェクトがターゲット タイプと一致しません」と表示されます。TargetException が処理されませんでした
デバッグすると、両方が正しいことがわかります。( temp と item ) しかし、それでも例外がスローされます。
編集:
「List」オブジェクトは ではなく、List<Something>
リストされるオブジェクトであるため、 List はオブジェクト (オブジェクト List ) であると言わざるを得ません。私のユーザー コントロールは一般的です。そのため、リフレクションを使用しています。
このようにして、 objectList1.ShowList(ListExpressions, "OriginalExpression"); を持つことができます。
この場合、ListExpressions はリストですが、オブジェクトとしてユーザー コントロールに送信されます。リフレクションを通じて、それがどのタイプのリストであるかを確認し、プロパティ「OriginalExpression」を読み取ってリストを表示できます。
それで、プロパティ「OriginalExpression」のリストを取得します。
ユーザー コントロールは正常に動作します。問題は、この最後の部分を機能させることです。アイテムをクリックすると、「オブジェクトがターゲット タイプと一致しません。」というメッセージが表示されます。
それを行う方法についてのアイデアはありますか?
どうもありがとう!