1

![ここに画像の説明を入力][1] こんにちは、2 つのテキスト ボックスの情報を 2 つの別々のリスト ボックスに表示しようとしています。アーティスト名を表示するものとメンバー数を表示するもの。現在、[アーティストの追加] ボタンをクリックすると、次のようになります。

ご覧のとおり、アーティスト名のみが表示されます。これは、アーティスト クラスの次のコードによるものです。

これは、アーティスト名を listbox1 に表示するフォーム クラスのコードです。

listBox2.Items.Add(Members); を試しました。および listBox2.Items.Add(artist.Members); それを機能させるために、しかし、どちらもメンバーを見つけることができません。これを回避する唯一の方法は、次のコードを使用することですが、foreach でエラー メッセージが表示されます。

![ここに画像の説明を入力してください][2] ここからどこへ行けばいいのか本当にわかりません。(何か役立つ場合に備えて、Artist クラスと Form クラスのコードを以下に挿入しました)

4

2 に答える 2

1

あなたはおそらく欲しい:

ArtistTree.InOrderListBox

List<Artist>の代わりにを返しList<string>ます。そうすればあなたのループ:

foreach (Artist artist in ListBoxName)
{ 
     listBox1.Items.Add(artist);
     listBox2.Items.Add(artist.Members);
}

動作するはずです。

現在、ListBoxNameがとして宣言されているためエラーが発生してList<string>いますが、(foreachを使用して)それを反復処理しようとしており、リスト内の各アイテムはアーティストであり、以前にリスト内の各要素のタイプを指定しましたリストは宣言内の文字列です

List<string> ListBoxName = new List<string>();

したがって、Artistからstringへのキャストがないため、コンパイルエラーが発生します。つまり、次のことができませんでした。

Artist a = new Artist();
string castMe = (string) a;

ToString()の呼び出しは、キャストと同じではありません。

HTH、ネイサン

于 2013-03-20T18:11:45.947 に答える
1

メソッドを変更して、文字列 ( ) ではなく s のArtistTree.InOrderListBoxリストを返す (または埋める) ようにします。また、メソッドのパラメーターを ba パラメーターにする必要はありません。メソッドは引数自体を変更する必要はなく、引数の内容を変更するため、通常の値渡しパラメーターが機能します。ArtistArtist.Nameref

List<Artist> artistSorted = new List<Artist>();
ArtistTree.InOrderListBox(artistSorted);

ListBoxNames.DataSource = artistsSorted;
ListBoxNames.DisplayMember = "Name";

ListBoxNames.DataSource = artistsSorted;
ListBoxNames.DisplayMember = "Members";

ListBoxName現在、リストにはアーティストの名前しかありません。これは文字列値のリストです。Members名前のリストからプロパティを抽出する方法はありません! ArtistTree.InOrderListBoxメソッドを変更する必要があります。

于 2013-03-20T18:13:53.203 に答える