7.8 窗体间传递数据

发布于:2025-03-28 ⋅ 阅读:(26) ⋅ 点赞:(0)

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的

当项目中有多个窗体时(在本节中为两个窗体:Form1和Form2),窗体间传递数据有以下几种方法。

7.8.1 在公共类中定义公共变量

VB.Net中可以在模块中定义全局变量作为整个项目的变量,但是在C#中没有模块概念,只能考虑使用公共类的公共变量。

【例 7.5【项目:code7-005】通过公共类的公共变量传递数据。

通过菜单【项目】|【添加模块】,或者右击【解决方案资源管理器】项目名称,在弹出菜单中单击【添加】|【类】。在【添加新项】窗口中使用默认的模块名称“Class1.cs”,单击【添加】按钮。

在Class1.cs的代码中定义:

static public string passParameter;

在Form1中增加一个Button控件,在Form2上增加一个Label控件。

Form1中的代码:

        private void button1_Click(object sender, EventArgs e)

        {

            //设置公共变量的值

            Class1.passParameter = "公共变量";

            //定义Form2类型

            Form2  frm2 = new Form2();

            //显示Form2

            frm2.ShowDialog();

        }

Form2中的代码:

        private void Form2_Load(object sender, EventArgs e)

        {

            label1.Text = Class1.passParameter;

        }

运行结果如下图所示:

图7-15 Form2上显示字符串

7.8.2 Form1中的数据传递到Form2方法1

【例 7.6【项目:code7-006】修改Form2的构造函数传递数据。

在Form2的代码中找到构造函数:

        public Form2()

        {

            InitializeComponent();

     }

在Form2后面的括号内输入:

string passParameter

这就是我们需要传递的参数。

增加一个窗体级的变量,同时完善代码。修改后的代码如下:

        string passedParameter;

        public Form2(string passParameter)

        {

            InitializeComponent();

            this.passedParameter = passParameter;

     }

注意:不能删除 InitializeComponent(),否则会影响窗口的设计,只需要在InitializeComponent()后面增加代码即可。

在Form2上增加一个label控件,同时修改Form2_Load事件代码:

        private void Form2_Load(object sender, EventArgs e)

        {

            label1.Text = passedParameter;

        }

Form1中设置按钮按下事件的代码:

        private void button1_Click(object sender, EventArgs e)

        {

            Form2 frmNew = new Form2("这是Form1传递给Form2的字符串");

            frmNew.ShowDialog();

        }

运行结果如下图所示:

图7-16 在Form2窗体上显示传递的数据

7.8.3 Form1中的数据传递到Form2方法2

【例 7.7【项目:code7-007】修改Form2中变量的访问级别。

先在Form2中定义一个Public级别变量,然后在Form1中定义(实例化)Form2后,就可以使用这个变量了。

Form2中的代码:

        public string passedParameter;

        private void Form2_Load(object sender, EventArgs e)

        {

            label1.Text = passedParameter;

        }

Form1中的代码:

        private void button1_Click(object sender, EventArgs e)

        {

            Form2  frmNew=new Form2();

            frmNew.passedParameter = "这是Form1传递给Form2的字符串";

            frmNew.ShowDialog();

        }

运行结果同【例 7.7】。

7.8.4 Form2中的数据传递回Form1方法1

【例 7.8【项目:code7-008】定义Form1类型的项目公共变量。

将Program.cs中的代码修改为:

        public static Form1 newForm1;

        [STAThread]

        static void Main()

        {

            Application.EnableVisualStyles();

            Application.SetCompatibleTextRenderingDefault(false);

            newForm1 = new Form1();

            Application.Run(newForm1);

        }

在Form1中添加1个Label控件和2个Button控件,在Form2中添加1个Button,名称均使用默认名称。

Form1中的代码如下:

public string passedWords;

        private void button1_Click(object sender, EventArgs e)

        {

            Form2 newForm2 = new Form2() ;

            newForm2.ShowDialog();

        }

        private void button2_Click(object sender, EventArgs e)

        {

            label1.Text = passedWords;

        }

在Form2中加入一个按钮,按钮单击代码:

        private void button1_Click(object sender, EventArgs e)

        {

            Program.newForm1.passedWords = "这是Form2传递回Form1的字符串";

            this.Close();

        }

由于Program.newForm1是公共变量,因此在Form2中可以调用它。

点击Form1上的Button1,出现Form2,在点击Form2上的Button1,此时将TextBox1中的文本传递给了Form1的变量passedWords,同时Form2关闭。然后单击Form1上的Button2,Label1的文本将变为变量passedWords的内容。

图7-19 在Form1窗体上显示传回的数据

如果仅仅是为了修改Form1上Label1的文本,可以将Form1.Designer.cs中的代码

private System.Windows.Forms.Label label1;

修改为:

public System.Windows.Forms.Label label1;

然后直接在Form2的Button1按下事件中使用如下代码:

        private void button1_Click(object sender, EventArgs e)

        {

            Program.newForm1.label1.Text = "这是Form2传递回Form1的字符串";

            this.Close();

        }

7.8.5 Form2中的数据传递回Form1方法2

【例 7.9【项目:code7-009】使用窗体的Owner属性。

在Form1中添加1个Label控件和1个Button控件,在Form2中添加1个Button,名称均使用默认名称。

将Form1.Designer.cs中的代码

private System.Windows.Forms.Label label1;

修改为:

public System.Windows.Forms.Label label1;

Form1中的代码如下:

    public string passedWords;

        private void button1_Click(object sender, EventArgs e)

        {

            Form2 newForm2 = new Form2();

            //Form1(Me)设置为Form2的所有者

            newForm2.ShowDialog(this);

        }

        private void button2_Click(object sender, EventArgs e)

        {

            label1.Text = passedWords;

        }

Form2中的代码如下:

        private void button1_Click(object sender, EventArgs e)

        {

            Form1 frm;

            //通过Form2的所有者获得Form1

            frm = (Form1)this.Owner;

            frm.label1.Text = "这是Form2传递回label1的字符串";

            frm.passedWords = "这是Form2传递回passedWords的字符串";

            this.Close();

     }

运行结果如下图所示:

图7-20 在Form1窗体上显示传回的数据

学习更多vb.net知识,请参看vb.net 教程 目录

学习更多C#知识,请参看C#教程 目录