![在此处输入图片说明] [1] 嗨,我正在尝试将两个文本框中的信息显示为两个单独的列表框;一个显示艺术家姓名,另一个显示成员数量。目前,当我点击Add Artist按钮时会发生这种情况:
正如您所看到的,只有艺术家名称显示,这是因为艺术家类中的这段代码:
我的表单类中的代码将艺术家名称显示在listbox1中。
我试过listBox2.Items.Add(Members);和listBox2.Items.Add(artist.Members);为了尝试让它工作,但他们都找不到会员。我找到的唯一方法是使用以下代码,但是foreach然后会出现错误消息:
![在此处输入图片说明] [2] 我真的不知道从哪里去,任何帮助表示赞赏! (我已经从我的Artist类和Form类中插入代码以防万一有帮助)
答案 0 :(得分: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)并且说列表中的每个项目都是艺术家,而你&#39;我之前说过,列表中每个元素的类型都是声明中的字符串
List<string> ListBoxName = new List<string>();
因此,您收到编译错误,因为您没有从Artist到字符串的强制转换,即您无法执行:
Artist a = new Artist();
string castMe = (string) a;
调用ToString()与强制转换不同。
HTH,Nathan答案 1 :(得分:1)
修改您的ArtistTree.InOrderListBox
方法,使其返回(或填充)Artist
s列表而不是字符串(Artist.Name
)。此外,方法的参数不需要b ref
参数。正常的按值参数可以正常工作,因为该方法不需要更改参数本身,而是更改参数的内容。
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
方法。