试图从我的列表框中获取信息以显示在文本框中
本文关键字:显示 文本 信息 获取 我的 列表 | 更新日期: 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()中将图书添加到集合中,那么您将更新集合中与所选图书不匹配的第一本图书的文本框。