我的程序有问题。
我正在尝试创建一个数字图书库,您可以在其中添加一本书,选择一个封面并添加有关它的信息(当用户在form2中单击“确认”时)。单击添加的书(现在显示在form1上)后,我希望有4个标签来显示书名,作者,流派和出版年份。
我在switch语句中创建了9个“ Libro”(Book)类的实例(每次用户添加书籍时,计数器都会增加计数),就像这样:
public void BtnConferma_Click(object sender, EventArgs e)
{
Form1 form = new Form1();
switch (form.counter)
{
case 1:
libro1 = new Libro(TxtTitolo.Text, TxtAutore.Text, TxtAP.Text);
break;
case 2:
libro2 = new Libro(TxtTitolo.Text, TxtAutore.Text, TxtAP.Text);
break;
case 3:
libro3 = new Libro(TxtTitolo.Text, TxtAutore.Text, TxtAP.Text);
break;
case 4:
libro4 = new Libro(TxtTitolo.Text, TxtAutore.Text, TxtAP.Text);
break;
case 5:
libro5 = new Libro(TxtTitolo.Text, TxtAutore.Text, TxtAP.Text);
break;
case 6:
libro6 = new Libro(TxtTitolo.Text, TxtAutore.Text, TxtAP.Text);
break;
case 7:
libro7 = new Libro(TxtTitolo.Text, TxtAutore.Text, TxtAP.Text);
break;
case 8:
libro8 = new Libro(TxtTitolo.Text, TxtAutore.Text, TxtAP.Text);
break;
case 9:
libro9 = new Libro(TxtTitolo.Text, TxtAutore.Text, TxtAP.Text);
break;
}
Close();
}
在form1类中,当我选择书时,我希望标签更改
private void Selezionato1(object sender, EventArgs e)
{
LibroInfo libroinfo = new LibroInfo();
LblTit.Text = libroinfo.libro1.Titolo;
LblAutore.Text = libroinfo.libro1.Autore;
LblAP.Text = libroinfo.libro1.AnnoPubb;
}
问题在于它告诉我libro1没有被实例化(我相信是因为它是在交换机内部被实例化的)
如何在form1.cs中访问“ libro”的实例?
谢谢
答案 0 :(得分:1)
LibroInfo libroinfo = new LibroInfo();
这将创建一个新的LibroInfo实例,该实例将覆盖您在switch语句中所做的操作。 这就是为什么此行失败。 LblTit.Text = libroinfo.libro1.Titolo;
您正在创建一个新的LibroInfo实例,默认情况下libro1值为空
答案 1 :(得分:0)
使用列表:
为您的书制作一个类,其中包含要显示的字符串,然后
public class Book(){
public string title{get;set;}
public string author{get;set;}
public string genre{get;set;}
public string year{get;set;}
public Book(string tit,string authr, string gen, int pub ){
this.title=tit;
this.authr=author;
this.genre=gen;
this.year=pub;
}
}
在您的主班级中,创建列表,创建书籍,将书籍添加到列表中;
List<Book> books = new List<Book>();
Book newbook = new Book("Eye of the world","Robert Jordan","Fantasy",1990);
books.Add(newbook);
现在您的列表很容易通过foreach进行迭代,或者可以调整为列表视图以方便排序。
您可以写出CSV文件并将其保存以供参考,但是一旦添加了几本书,您就需要数据库,或者可以用字典来完成。
答案 2 :(得分:0)
您可以使用字典来实现这一点。
将以下字段添加到您的表单中:
Dictionary<int, Libro> _libros = new Dictionary<int, Libro>();
int _seed = 0;
添加一种创建新libros的方法。该方法增加种子(id)并向字典添加新的libro:
public void NuevoLibro(string titolo, string autore, string annoPubb)
{
var libro = new Libro(titolo, autore, annoPubb);
_seed++;
_libros.Add(seed, libro);
}
在界面上选择了libro后,以某种方式检索所选的ID并从字典中获取libro:
public void Selezionato1(object sender, EventArgs e)
{
//Something in your GUI will have the id of the libro. Get that id and pull the libro out of the dictionary.
var id = GetSelectedId();
//Pull the libro from the dictionary
var libro = _libros[id];
//Populate the view
LblTit.Text = libro.Titolo;
LblAutore.Text = libro.Autore;
LblAP.Text = libro.AnnoPubb;
}
请注意,此代码不是线程安全的(特别是种子),应仅用于教育目的。 :-)