通過子窗口向外引發一個事件,父窗口去實現該事件,我們可以再不關閉父窗口和子窗口的情況下進行數據的傳輸顯示
思路:在子窗口“添加用戶”的中通過點擊"添加用戶",會動態的向外引發一個事件,通過該事件,我們可以進行數據傳遞
在其他窗口中,可以來響應該事件
其中,子窗口只負責向外引發一個事件,將事件的實現方法委托給別的對象,至於事件具體如何做處理,子窗口是不關心的,這一點體現了松耦合的一個設置
涉及到的知識點: 1.如何定義一個事件? public delegate void UserAddEventHandler(); public event UserAddEventHandler UserAdd; 2.如何響應子窗口引發出來的事件? userDialog.UserAdd += userDialog_UserAdd;//將UserAdd的實現委托為userDialog_UserAdd方法 void userDialog_UserAdd() { //方法體 } 3.子窗口中如何向父窗口傳遞數據? 通過delegate的聲明中,添加兩個參數: public delegate void UserAddEventHandler(object sender,UserEventArgs e); 其中UserEventArgs是一個繼承自EventArgs的類 public class UserEventArgs : EventArgs { public User currentUser { get;set;} public UserEventArgs(User user) { this.currentUser = user; } } 從而,在向外引發事件的時候,將User的信息通過第二個參數傳遞出去 private void button1_Click(object sender, EventArgs e) { //向外引發一個事件 if(UserAdd!=null) { User user = new User(); user.UserName = textBox3.Text; user.PassWord = textBox4.Text; UserAdd(this,new UserEventArgs(user)); } } 在父窗口的userDialog_UserAdd方法中,就可以對接收到的數據進行處理 private void 添加用戶ToolStripMenuItem_Click(object sender, EventArgs e) { FrmUser userDialog = new FrmUser(); //將UserAdd的實現委托為userDialog_UserAdd方法 userDialog.UserAdd += userDialog_UserAdd; userDialog.ShowDialog(); } void userDialog_UserAdd(object sender,UserEventArgs e) { MessageBox.Show(e.currentUser.UserName); }
原創文章,轉載請注明出處:http://www.cnblogs.com/hongfei/archive/2012/12/17/2822203.html