我已经制作了以下表格,我在显示成员列表框中的成员数量方面遇到问题,这里是按下“添加艺术家”按钮之前的屏幕截图
以下是当我按添加艺术家时会发生的情况,因为您可以看到它使用艺术家姓名的内容而不是艺术家数量
这是我的form1代码:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
Dictionary<String, Book> music = new Dictionary<String, Book>();
private void btnAdd_Click(object sender, EventArgs e)
{
if ((txtIsbn.Text != "") & (txtArtist.Text != "")) // if text artist name and number of artists is present
{
try { music.Add(txtArtist.Text, new Book(txtArtist.Text, txtIsbn.Text)); } //txtArtist
catch { MessageBox.Show("Already Exist!!"); }
}
else MessageBox.Show("Please fill in both Artist Name and Number of Members");
listBox1.Items.Clear();
listBox2.Items.Clear();
listBox3.Items.Clear();
foreach (var pair in music)
{
listBox1.Items.Add(pair.Key);
//listBox2.Items.Add(pair.Value.Onloan);
listBox3.Items.Add(pair.Key);
}
}
这是我的Artist类的代码(因为我编辑了之前创建的程序而被称为book):
class Book
{
private String mem; //mem = number of members
private string artist;
public Book(string mem, string artist)
{
this.mem = mem;
this.artist = artist;
}
public string MEM
{
get { return mem; }
set { mem = value; }
}
public string Artist
{
get { return artist; }
set { artist = value; }
}
我意识到它正在从'Key'命令添加艺术家名称的值:listBox3.Items.Add(pair.Key);
然而我不知道该怎么改变它...感谢任何帮助很多谢谢:)
答案 0 :(得分:1)
在你的
中 foreach (var pair in music)
{
listBox1.Items.Add(pair.Key);
//listBox2.Items.Add(pair.Value.Onloan);
Book b = pair.Value;
listBox3.Items.Add(b.MEM);
}
您不会将MEM属性的内容添加到列表框中。 但我也没有看到你设置的任何地方。
答案 1 :(得分:1)
很难说清楚,但似乎你想在foreach循环中想要这个:
listBox3.Items.Add(pair.Value.MEM);
此外,由于构造函数中的mem
参数是第一个,因此您可能希望交换传入的内容以使其排列:
new Book(txtIsbn.Text, txtArtist.Text)
这假设txtArtist.Text
包含Artist
所需的值,而txtIsbn.Text
包含MEM
所需的值。
作为旁注,值得您花些时间来清理名称,这样可以让以后更容易找到问题。
答案 2 :(得分:1)
而不是:
foreach (var pair in music)
{
listBox1.Items.Add(pair.Key);
//listBox2.Items.Add(pair.Value.Onloan);
listBox3.Items.Add(pair.Key);
}
我想你想要:
foreach (var pair in music)
{
listBox1.Items.Add(pair.Key);
//listBox2.Items.Add(pair.Value.Onloan);
listBox3.Items.Add(pair.Value.MEM );
}
答案 3 :(得分:1)
您的音乐词典包含艺术家姓名的书籍 所以关键是书的名称,价值就是书 正确的方法是:
foreach (var pair in music)
{
var book = pair.Value;
listBox1.Items.Add(book.Artist);
listBox3.Items.Add(book.MEM);
}
答案 4 :(得分:1)
只需检查书籍是否已添加到字典中,而不是捕获异常。同时将书籍设置为列表框的数据源,而不是手动将它们添加到项目中:
private void btnAdd_Click(object sender, EventArgs e)
{
if (txtIsbn.Text == "" || txtArtist.Text == "")
{
MessageBox.Show("Please fill in both Artist Name and Number of Members");
return;
}
Book book = new Book(txtArtist.Text, txtIsbn.Text);
if (music.ContainsKey(book.Artist))
{
MessageBox.Show("Already Exist!!");
return;
}
music.Add(book.Artist, book);
var books = music.Values.ToList();
listBox1.DisplayMember = "Artist"; // set it in designer
listBox1.DataSource = books;
listBox3.DisplayMember = "MEM"; // set it in designer
listBox3.DataSource = books;
}