2011-11-06 51 views
0

我有这个代码使用winforms获取数据传递两个窗体(LibraryBookDialog.cs和MainForm.cs)之间。C#将一个对象从一个winform传递给一个listBox ...为什么它现在显示出来了?

这里是LibraryBookDialog.cs代码:

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 

namespace COMP2614HomeLab08 
{ 
    public partial class LibraryBookDialog : Form 
    { 
     private LibraryBook book; 

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

     public LibraryBookDialog() 
     { 
      InitializeComponent(); 
     } 

     private bool validateData() 
     { 
      // code that validates user input data 
     } 

     private void buttonOk_Click(object sender, EventArgs e) 
     { 
      if (validateData()) 
      { 
       try 
       { 
        LibraryBook book = new LibraryBook(); 
        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代码:

namespace COMP2614HomeLab08 
{ 
    public partial class MainForm : Form 
    { 
     public MainForm() 
     { 
      InitializeComponent(); 
     } 

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

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

     private void MainForm_Load(object sender, EventArgs e) 
     { 
      listBoxLibraryBooks.DisplayMember = "Title"; 
     } 
    } 
} 

问题:为什么,当我加入LibraryBook预订对象到列表框,我得到一个空白元素。我的意思是,它在那里,列表框中的元素存在,但我不确定数据是否已从窗体传递到窗体。这是为什么?

+0

[C#传递对象的可能重复在窗体之间](http://stackoverflow.com/questions/8024975/c-sharp-passing-objects-between-forms) –

回答

3

您正在使用Book属性的对话框,但未在书对话框中将其设置,并且属性getter返回一个新实例(如果它为null)。这就是为什么你得到一个空白的条目。

private void buttonOk_Click(object sender, EventArgs e) 
    { 
     if (validateData()) 
     { 
      try 
      { 
       ----> LibraryBook book = new LibraryBook(); <----- this a private book of this method. 
       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); 
      } 
     } 
    } 

无论是书申报改为

this.book = new LibraryBook(); 

还是创造了书的结尾设置你的类成员的书这个像这样

this.book = book; 
相关问题