WinForm中窗体间的数据传递(一)

窗体间的数据传递的几种方法:

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

 

原文地址:https://www.cnblogs.com/hongfei/p/2822137.html