Как получить доступ к экземпляру, созданному внутри метода - PullRequest
0 голосов
/ 05 октября 2018

У меня проблема в моей программе.

Я пытаюсь создать библиотеку цифровых книг, где вы можете добавить книгу, выбрать обложку и добавить информацию о ней (когда пользовательнажимает «подтвердить» в форме 2).как только вы нажмете на книгу, которую вы добавили (которая теперь появляется в форме 1), я хочу, чтобы 4 метки отображали название, автора, жанр и год публикации.

я создал 9 экземпляров класса "Libro" (Book) внутри оператора switch (запускается счетчиком, который увеличивается каждый раз, когда пользователь добавляет книгу), например:

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 не создан (я полагаю, это происходит, потому что он создается внутри коммутатора)

как я могу получить доступ к экземпляру "libro" вform1.cs?

спасибо

Ответы [ 3 ]

0 голосов
/ 05 октября 2018

используйте список:

создайте для своей книги класс, содержащий строки, которые вы хотите показать, затем

    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 и сохранитьэто для наглядности, но как только вы добавите несколько книг, вы захотите получить базу данных, или это может быть сделано со словарем.

0 голосов
/ 05 октября 2018

Вы можете использовать словарь для реализации этого.

Добавьте эти поля в форму:

Dictionary<int, Libro> _libros = new Dictionary<int, Libro>();
int _seed = 0;

Добавьте метод для создания новых libros.Метод увеличивает начальное число (id) и добавляет новый словарь в словарь:

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

Обратите внимание, что этот код не является потокобезопасным (особенно семя) и должен использоваться только в образовательных целях.: -)

0 голосов
/ 05 октября 2018
LibroInfo libroinfo = new LibroInfo();

Это создает новый экземпляр LibroInfo, который перезаписывает то, что вы сделали в операторе switch.Вот почему эта линия не работает.LblTit.Text = libroinfo.libro1.Titolo;

Вы создаете новый экземпляр LibroInfo, который по умолчанию имеет нулевое значение libro1

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...