2016-01-11 76 views
1

如何將對象及其所有值從窗體A傳遞到窗體B?在窗體之間傳遞對象及其所有值

下面是一些「假設代碼」,我已經產生,我爲了多態預訂法雖然搜索列表。一旦找到了名字,我就會根據預訂的小時數來計算價格。所有這些都是使用對象的''完成的。所有這些代碼是對形態A.

private void btnEnter_Click(object sender, EventArgs e) 
{    
    string searchName = Convert.ToString(lstActs.SelectedItem); 
    foreach (Singer s in singers) 
    { 
     if (String.Compare(searchName, s.Name) == 0) 
     { 
      s.HoursBooked = Convert.ToInt32(nudHours.Value); 
      MessageBox.Show(Convert.ToString(s.HoursBooked), s.Name); 
      double price = s.CalculatePrice(s.Price, s.HoursBooked); 
      MessageBox.Show(Convert.ToString(price)); 
     } 
    } 


    Confirm myNewForm = new Confirm(); 
    myNewForm.ShowDialog(); 
    this.Hide(); 
} 

回答

3

一個按鈕的數據來創建一個新的類要顯示:

public class ConfirmationData 
{ 
    // some properties 
} 

填充對象:

ConfirmationData data = new ConfirmationData(); 

string searchName = Convert.ToString(lstActs.SelectedItem); 
foreach (Singer s in singers) 
{ 
    if (String.Compare(searchName, s.Name) == 0) 
    { 
     s.HoursBooked = Convert.ToInt32(nudHours.Value); 
     MessageBox.Show(Convert.ToString(s.HoursBooked), s.Name); 
     double price = s.CalculatePrice(s.Price, s.HoursBooked); 
     MessageBox.Show(Convert.ToString(price)); 

     .... fill 'data' with the Information you want to display 
    } 
} 

最後將數據傳遞給確認對話框並顯示它:

Confirm myNewForm = new Confirm(data); 
myNewForm.ShowDialog(); 
+0

嘿,謝謝你的迴應。你是否建議我創建一個名爲確認數據的新類?僅僅因爲我有一個名爲'確認'的表單,這就是我需要的對象以及所有數據傳遞給的對象。在底部,我只是在表單之間切換。謝謝你的時間! – abcdefg

+0

「確認數據」只是一個傳輸對象。是的,一個新的班級。由於您要傳遞給「確認」視圖的數據(歌手)不能在底部訪問,因此您需要使用另一個對象。您還可以傳送歌手名單(列表)作爲傳送對象。 – Marc

+0

嗨,老兄,我添加了一個新的類如你所說,那麼我傳遞的數據作爲參數,以新的形式,並添加另一個構造這種形式來接收數據 私人數據傳遞的數據; 公共確認() { 的InitializeComponent(); } 公共確認(數據傳遞數據) { this.data =數據; } 而我現在得到的錯誤:可訪問性不一致:參數類型「數據傳遞」比方法「Confirm.Confirm(數據傳遞)」 ......任何想法不太容易接近,謝謝! – abcdefg

0

您的確認課程工作取決於Singer課程的價值,不是嗎?如果是這樣,你可以添加一個參數,以確認構造,這樣的:

public Confirm(Singer singer) 
{ 
    //null-check I suppose 
} 

所以你寫的按鈕按下處理程序將結束這樣的:

Confirm myNewForm = new Confirm(s);//where s is Singer 
    myNewForm.ShowDialog(); 
    this.Hide(); 

否則,您可以添加一個新的公共屬性確認類,並在顯示對話框之前爲其分配一個值:

Confirm myNewForm = new Confirm(); 
myNewForm.Singer = s; 
    myNewForm.ShowDialog(); 
    this.Hide(); 
+0

嗨,感謝您的回覆,我已經嘗試過這些,出於某種原因,我無法訪問新窗體上的對象'或其任何數據。我試圖重載構造函數,但似乎無法訪問該對象:/ – abcdefg