版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的
当项目中有多个窗体时(在本节中为两个窗体: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#教程 目录