试图从我的列表框中获取信息以显示在文本框中

本文关键字:显示 文本 信息 获取 我的 列表 | 更新日期: 2023-09-27 18:07:26

我有一个应用程序,我正在构建输入数据到一个列表中,使用一个选项卡上的输入文本框(说tab 1)。当你点击命令按钮时,它会将数据(书号,作者,标题,类型,页数和出版商)添加到一个列表(书籍)。

然后在选项卡2的列表框中显示书名。当您单击选项卡2上的列表框中的项目时,我希望它重新显示您刚刚在选项卡1上输入的所有信息,进入选项卡2上的文本框。但我没法让信息出现。

下面是我的代码,包括我为项目创建的类。
class Book
{
    //attributes
    private string callNumber;
    private string bookTitle;
    private string authorName;
    private string genre;
    private int numberOfPages;
    private string publisher;
    //constructor
    public Book()
    { 
    }
    //accessor
    public void SetNumber(string aNumber)
    {
        callNumber = aNumber;
    }
    public void SetTitle(string aTitle)
    {
        bookTitle = aTitle;
    }
    public void SetAuthor(String aName)
    {
        authorName = aName;
    }
    public void SetGenre(String aGenre)
    {
        genre = aGenre;
    }
    public void SetPages(int aPageNumber)
    {
        numberOfPages = aPageNumber;
    }
    public void SetPublisher(String aPublisher)
    {
        publisher = aPublisher;
    }
    public string GetNumber()
    {
        return callNumber;
    }
    public string GetTitle()
    {
        return bookTitle;
    }
    public string GetAuthor()
    {
        return authorName;
    }
    public string GetGenre()
    {
        return genre;
    }
    public int GetPages()
    {
        return numberOfPages;
    }
    public string GetPublisher()
    {
        return publisher;
    }
}
public partial class Form1 : Form
{
    List<Book> books;
    public Form1()
    {
        InitializeComponent();
        this.books = new List<Book>();
    }
    private void btnAdd_Click(object sender, EventArgs e)
    {
        Book aBook = new Book();
        aBook.SetNumber(txtCallNumber.Text);
        aBook.SetAuthor(txtAuthorName.Text);
        aBook.SetTitle(txtBookTitle.Text);
        aBook.SetGenre(txtGenre.Text);
        aBook.SetPages(int.Parse(txtNumberOfPages.Text));
        aBook.SetPublisher(txtPublisher.Text);


        foreach (Control ctrl in this.Controls)
        {
            if (ctrl is TextBox)
            {
                ((TextBox)ctrl).Clear();
            }
            txtCallNumber.Focus();
            txtAuthorName.Clear();
            txtBookTitle.Clear();
            txtCallNumber.Clear();
            txtGenre.Clear();
            txtNumberOfPages.Clear();
            txtPublisher.Clear();
            lstLibrary.Items.Add(aBook.GetTitle());

        }
    }
    private void lstLibrary_SelectedIndexChanged(object sender, EventArgs e)
    {
        int index = 0;
        foreach (Book book in books)
        {
            string tempTitle;
            tempTitle = book.GetTitle();
            if (tempTitle == (string)lstLibrary.SelectedItem)
                break;
            else
            {
                index++;
            }

        txtNumberRecall.Text = books[index].GetNumber();
        txtTitleRecall.Text = books[index].GetTitle();
        txtAuthorRecall.Text = books[index].GetAuthor();
        txtGenreRecall.Text = books[index].GetGenre();
        txtPagesRecall.Text = Convert.ToString(books[index].GetPages());
        txtPublisherRecall.Text = books[index].GetPublisher();
        break;
            }
        }
    }
}

再一次,我试图从列表框中获取信息(在单击事件中)显示在文本框中。

试图从我的列表框中获取信息以显示在文本框中

这样的东西会起作用吗?

private void button1_Click(object sender, EventArgs e)
    {
        int i = 0;
        foreach (string s in listBox1.Items)
        {
            i++;
            if (i == 1)
            {
                textBox1.Text = s;
            }
            if (i == 2)
            {
                textBox2.Text = s;
            }
            if (i == 3)
            {
                textBox3.Text = s;
            }
        }
    }

在btnAdd_Click方法中,您永远不会保存您创建的新book。你需要把它添加到你的藏书中。在lstLibrary中添加标题作为条目。Items并不实际保存新创建的对象。

另外,您应该检查您的循环结构。在btnAdd_Click()中,看起来您将为窗体上存在的每个控件添加一次lstLibrary。在lstLibrary_SelectedIndexChanged()中,如果您已经在btnAdd_Click()中将图书添加到集合中,那么您将更新集合中与所选图书不匹配的第一本图书的文本框。