C # Передача объектов между формами - PullRequest
0 голосов
/ 06 ноября 2011

Итак, у меня есть две формы. LibraryBookDialog.cs и MainForm.cs. Я пытаюсь передать объект из LibraryBookDialog.cs в Mainform.cs. Проблема в том, что я получаю эту ошибку при попытке сделать это ...

object reference not set to an instance of the object

Вот мои две формы ...

LibraryBookDialog.cs:

private LibraryBook book;

public LibraryBook Book
{
    get { return book;}
    set { book = value;} 
}

private void buttonOk_Click(object sender, EventArgs e)
    {
        if (validateData())
        {
            try
            {
                Book.Title = textBoxTitle.Text; 
                Book.Author = textBoxAuthor.Text;
                Book.CopyrightYear = Convert.ToInt32(textBoxCopyrightYear.Text);
                this.DialogResult = DialogResult.OK;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "There was an error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
    }

и MainForm.cs

private void buttonNew_Click(object sender, EventArgs e)
    {
        LibraryBookDialogue dlg = new LibraryBookDialogue();
        dlg.ShowDialog();

        if (dlg.DialogResult == DialogResult.OK)
        {
            listBoxLibraryBooks.Items.Add(dlg.Book);
        }
        dlg.Dispose();
    }

Почему это происходит?

Ответы [ 3 ]

2 голосов
/ 06 ноября 2011
private LibraryBook book = new LibraryBook();

или

private void buttonOk_Click(object sender, EventArgs e)
{
    if (validateData())
    {
        try
        {
            // Create book instance and assign properties
            Book = new LibraryBook()
            {
                Title = textBoxTitle.Text,
                Author = textBoxAuthor.Text,
                CopyrightYear = Convert.ToInt32(textBoxCopyrightYear.Text)
            };
            this.DialogResult = DialogResult.OK;
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message, "There was an error", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }
    }
}
2 голосов
/ 06 ноября 2011

Похоже, вы никогда не помещаете экземпляр LibraryBook в свойство Book.

1 голос
/ 06 ноября 2011

Вам нужно инициализировать свойство Book.Для него никогда не устанавливается значение, поэтому при его использовании будет null.

Вы можете сделать что-то подобное.

public LibraryBook Book
{
    get 
    { 
        if (book == null)
        {
            book = new LibraryBook();
        }
        return book;
    }
    set { book = value;} 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...