将文本框中的信息显示为表单C#中的列表框

时间:2013-03-19 21:22:55

标签: c# string forms listbox

我已经制作了以下表格,我在显示成员列表框中的成员数量方面遇到问题,这里是按下“添加艺术家”按钮之前的屏幕截图

enter image description here

以下是当我按添加艺术家时会发生的情况,因为您可以看到它使用艺术家姓名的内容而不是艺术家数量

enter image description here

这是我的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);

然而我不知道该怎么改变它...感谢任何帮助很多谢谢:)

5 个答案:

答案 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;
}