2012-07-31 104 views
0

因此,我剛剛閱讀了MSDN上的事件教程,並在我的程序中應用它時遇到了一些問題。我想知道這裏有人能否幫我一把。C#中的事件和Windows窗體#

所以我有兩種形式,一種叫做frmInventory的父母和一個叫frmNewProduct的孩子。孩子有一個叫做btnAccept的按鈕。目前,訂閱此事件的單個訂戶名爲btnAccept_Click。現有用戶在子表單上。我想爲此活動添加第二位訂閱者,但此訂閱者將位於父表單上。這裏是我的父窗體上的功能:

public void updateInventoryFromChild(object sender, EventArgs e) 
{ 
    //Not sure how to get this working either, but that is another story 
    _inventroy = (frmNewProduct)sender._inventory 
} 

這裏是我的嘗試訂閱功能,以我孩子的事件:

this.btnAccept.Click += new System.EventHandler((frmInventory)this.Parent.updateInventoryFromChild); 
+0

你想要在父窗體上觸發點擊事件嗎? – 2012-07-31 03:26:59

+0

我希望在子窗體上單擊某個特定按鈕時觸發該事件。在父表單上觸發什麼意思?我認爲答案是肯定的。 – Nick 2012-07-31 03:33:28

+0

你有什麼問題?你有錯誤嗎?事件是否在父窗體上觸發?另外,你如何用Show()或ShowDialog()打開子窗體? – 2012-07-31 03:39:44

回答

3

正如我在以前的帖子中的一個說,我想的ShowDialog()會更好,例如:

class ChildForm : Form { 
    private Inventory _inventory; 

    public Inventory MyInventory { 
     get { 
      return _inventory; 
     } 
    } 

    private void btnAccept_Click(object sender, EventArgs e) { 
     _inventory = <set_inventory_here>; 
     DialogResult = System.Windows.Forms.DialogResult.OK; 
    } 
} 

..in你父窗體..

public void updateInventoryFromChild(object sender, EventArgs e) 
{ 
    ChildForm childForm = new ChildForm(); 
    if (childForm.ShowDialog() == System.Windows.Forms.DialogResult.OK) { 
     _inventory = childForm.MyInventory; 
    } 
} 
1

你應該在子窗體的構造函數下面的代碼!

this.btnAccept.Click += new System.EventHandler(this.Parent.updateInventoryFromChild); 
+0

現在,我在InitializeComponent函數中對所有Forms進行標準化處理。這是不夠的嗎? – Nick 2012-07-31 03:46:38

+0

@ user1556487你應該在調用InitializeComponent之後做到這一點! – Anirudha 2012-07-31 03:52:31