2011-11-06 205 views
0

所以我有兩種形式。 LibraryBookDialog.cs和MainForm.cs。我試圖將一個對象從LibraryBookDialog.cs傳遞給Mainform.cs。問題是,當我嘗試這樣做,我得到這個錯誤...C#在表單之間傳遞對象

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

這是怎麼發生的?

+0

** **在哪裏做你的錯誤?你使用了調試器嗎? – SLaks

+0

它發生在我單擊窗體上的確定後,catch {}就會看到它。 JIT編譯器告訴我這一點。 – iggy2012

+0

你在哪裏設置值爲'Book'?用你顯示的代碼看起來你試圖設置一個空的對象的屬性,你沒有爲它設置一個值。 – BrunoLM

回答

2

看起來您從未將LibraryBook實例放入Book屬性中。

+0

我該如何補救? (我是新窗口窗體) – iggy2012

+0

沒關係。我看到我需要初始化LibraryBook對象。 – iggy2012

1

您需要初始化Book屬性。它從來沒有被設置爲一個值,所以當你使用它的時候它會是null

你可以做這樣的事情。

public LibraryBook Book 
{ 
    get 
    { 
     if (book == null) 
     { 
      book = new LibraryBook(); 
     } 
     return book; 
    } 
    set { book = value;} 
} 
+0

我已經這樣做了,它似乎解決了這個問題,但現在當我看到listBox時,它顯示爲一個元素(我可以點擊它),但它只是一個空白字符串(toString )?還是因爲對象沒有創建?)。爲什麼會發生這種情況? – iggy2012

+1

'listBoxLibraryBooks'最有可能不知道如何解析你的'LibraryBook'對象,所以你需要在'listBoxLibraryBooks'上設置屬性,如:'listBoxLibraryBooks.ValueMember = LibraryBook.ID'(值是什麼,例如:ID)和'listBoxLibraryBooks.DisplayMember = LibraryBook.Title'(顯示在GUI上)。查看這些頁面以獲取更多信息:[ValueMember](http://msdn.microsoft.com/zh-cn/library/system.windows.forms.listcontrol.valuemember.aspx)和[DisplayMember](http:// msdn。 microsoft.com/en-us/library/system.windows.forms.listcontrol.displaymember.aspx) – John

+0

我希望人們對downvote發表評論。懶惰的初始化可能不是最好的(不知道你的情況),但我會自信地推薦它重新初始化每個按鈕點擊。 –

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