窗體間的數據傳遞的幾種方法:
1.通過子窗體的Tag屬性
2.借助第三方的一個靜態變量
3.通過父窗體的Tag屬性
局限性:必須得有一個窗體已經關閉,數據才能傳遞過去
那如果,我們想在都不關閉任何窗體的情況下進行數據傳遞,該如何操作?
在我的另外一篇博文中(WinForm中窗體間的數據傳遞(二))可以借助向外引發事件來解決這個問題
例子截圖如下:


當用戶點擊子窗口的“添加”按鈕的時候的代碼:
private void button1_Click(object sender, EventArgs e) { this.DialogResult = DialogResult.OK; //創建一個Info對象 User info = new User(); //將數據保存到Info對象中 info.UserName = textBox3.Text; info.PassWord = textBox4.Text; //問題:如何將info對象中的信息傳遞給主窗口 //方案一:將對象info保存到子窗口的Tag屬性中,則從父窗口中可以通過實例化的子窗口對象拿到info對象信息 //this.Tag = info; //方案二:將對象info保存到一個靜態變量中 //第三方.user = info; //方案三:將對象info保存到父窗口的Tag屬性中 MainFrm mainfrm = this.Owner as MainFrm; mainfrm.Tag = info; }
將用戶點擊主窗口中的“添加信息”的代碼:
private void 添加用戶ToolStripMenuItem_Click(object sender, EventArgs e) { FrmUser userDialog = new FrmUser(); if (userDialog.ShowDialog() == DialogResult.OK) //if (userDialog.ShowDialog(this) == DialogResult.OK) { //方案一:通過子窗口的Tag屬性進行窗體間的數據傳遞 User user=userDialog.Tag as User; //方案二:借助第三方的一個靜態屬性進行數據傳遞 User user = 第三方.user; //方案三:通過父窗口的Tag屬性進行窗體間的數據傳遞,注意傳遞一個this參數給userDialog.ShowDialog() User user = this.Tag as User; MessageBox.Show("用戶名:"+user.UserName+"\r\n密碼:" + user.PassWord); } }
其中,得特別注意第三種方案,當將要傳遞的信息保存到“主窗口”的Tag中的時候,在顯示“子窗口”的時候需要通過ShowDialog傳遞一個參數:this,用以設置當前窗體為子窗體的Owner
原創文章,轉載請注明出處:http://www.cnblogs.com/hongfei/archive/2012/12/17/2822137.html
