C#表单列表框

时间:2013-03-20 17:50:05

标签: c# tree listbox linked-list

![在此处输入图片说明] [1] 嗨,我正在尝试将两个文本框中的信息显示为两个单独的列表框;一个显示艺术家姓名,另一个显示成员数量。目前,当我点击Add Artist按钮时会发生这种情况:

正如您所看到的,只有艺术家名称显示,这是因为艺术家类中的这段代码:

我的表单类中的代码将艺术家名称显示在listbox1中。

我试过listBox2.Items.Add(Members);和listBox2.Items.Add(artist.Members);为了尝试让它工作,但他们都找不到会员。我找到的唯一方法是使用以下代码,但是foreach然后会出现错误消息:

![在此处输入图片说明] [2] 我真的不知道从哪里去,任何帮助表示赞赏! (我已经从我的Artist类和Form类中插入代码以防万一有帮助)

2 个答案:

答案 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方法。