リストビューからオブジェクトを選択し、このようにカスタム オブジェクトにキャストしようとしています
MyObject foo = (MyObject)MyListView.SelectedItems[0];
しかし、これは私にコンパイルエラーを与えます
エラー 4 タイプ 'System.Windows.Forms.ListViewItem' を 'MyObject' に変換できません
デフォルトListView
はデータバインド可能ではありません (つまり、一部のオブジェクトをリスト ビューのデータ ソースとして割り当てることはできません)。ListViewItem
データ型にキャストできないオブジェクトが含まれています。そのため、このエラーが発生します。
カスタムオブジェクトを取得したい場合は、以下ListViewItem
から手動で構築する必要がありますListViewItem
:
ListViewItem item = (MyObject)MyListView.SelectedItems[0];
MyObject foo = new MyObject();
foo.FirstName = item.Text;
foo.LastName = item.SubItems[1].Text;
foo.Age = Int32.Parse(item.SubItems[2].Text);
または、カスタムオブジェクトをのTag
プロパティに保存ListViewItem
して戻すこともできます:
ListViewItem item = (MyObject)MyListView.SelectedItems[0];
MyObject foo = (MyObject)item.Tag;
ところでDataGridView
、バインディングをサポートする使用を検討してください。
この方法でキャストするのではなく、別の方法でオブジェクトを作成する必要があると思います。
アイテム内のテキストを取得する場合は、そのテキストを使用してオブジェクトを作成します。
string txt = MyListView.SelectedItems[0].Text;
MyObject foo = new MyObject(txt);
次に、通常の方法でオブジェクトを使用します。詳細がなければ、何が必要かをこれ以上伝えることは困難です。