窗体间的数据传递的几种方法:
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