最近工作用到了C#开发Form应用程序,其中用到了主窗体和子窗体之间控件的相互调用。查了一些资料,现在根据自己写的一个小示例总结如下。
1.主窗体中调用子窗体控件
在主窗体中调用子窗体的控件很简单,只要在主窗体中创建子窗体的时候保留所创建的子窗体对象即可。
2.子窗体中调用主窗体控件
方法如下:
(1) 在主窗体类中定义一个静态数据成员,来保存当前主窗体对象,如下:
public static MainForm pMainWin = null;
(2) 然后在主窗体构造函数中,给上述静态成员初始化,如下:
public MainForm()
{
InitializeComponent();
pMainWin = this;//这里是初始化
}
(3) 在子窗体中调用主窗体,可以通过如下方式:”主窗体类名.pMainWin”,例如:
this.Text_S3.Text = MainForm.pMainWin.Text_M1.Text;
this.Text_S4.Text = MainForm.pMainWin.Text_M4.Text;
3.以上所做的,只是让你能够访问当前主窗体对象或子窗体对象,如果想操作控件,可以直接修改控件的成员访问符,即可以把”private”修改成”public”。当然最好的还是可以用增加公有属性的做法,这样不会破坏类本身的封装。如下:
public string Text_Box
{
get {return Text_S2.Text;}
set { Text_S2.Text = value; }
}
4.现在把一个小示例的代码粘贴如下:
(1)建立主窗体,添加四个文本框控件:Text_M1,Text_M4,用来主窗体中输入数据传给子窗体;Text_M2,Text_M3,用来显示子窗体中传过来的数据。一个按钮Btn_M1用来调用子窗体。Btn_M1按钮事件中添加代码,现把主窗体代码显示如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace MainSubControl
{
public partial class MainForm : Form
{
//在主窗口类中定义一个静态成员,来保存当前主窗体对象,以便子窗体中调用其控件
//子窗体调用时,通过"主窗体类名.pMinWin",然后在其构造函数中,给静态成员初始化.
public static MainForm pMainWin = null;
public MainForm()
{
InitializeComponent();
pMainWin = this;
}
private void Btn_M1_Click(object sender, EventArgs e)
{
SubForm SubFormE = new SubForm();
//由于下面要调用到子窗体SubFormE的Text_S1控件,所以需要把Text_S1控件的成员访问符号由private改成public即可.
//调用子窗体SubFormE的Text_S2控件是通过增加了一个public属性来调用的,不是修改访问修饰符号,当然也可以这么做
//也可以通过增加public方法来实现.
if (SubFormE.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
this.Text_M2.Text = SubFormE.Text_S1.Text;
this.Text_M3.Text = SubFormE.Text_Box;
return;
}
return;
}
private void Btn_MExit_Click(object sender, EventArgs e)
{
this.Close();
}
private void MainForm_Load(object sender, EventArgs e)
{
}
}
}
(2)建立子窗体,添加四个文本框:Text_S1,Text_S2,用来子窗体输入数据传给主窗体来显示;Text_S3,Text_S4,用来显示主窗体传过来的数据。一个确定按钮Btn_SOK。先把子窗体类代码显示如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace MainSubControl
{
public partial class SubForm : Form
{
//在子窗体中定义一个主窗体类的一个私有成员,来保存当前主窗体对象.
//为其构造函数增加一个主窗口的参数来初始化,子窗体中调用,用"this.pParentWin"
//18private MainForm pParentWin = null;
public SubForm()
{
InitializeComponent();
//18pParentWin = WinMain;
}
public string Text_Box
{
get {return Text_S2.Text;}
set { Text_S2.Text = value; }
}
private void SubForm_Load(object sender, EventArgs e)
{
this.Text_S3.Text = MainForm.pMainWin.Text_M1.Text;
//18this.Text_S4.Text = this.pParentWin.Text_M4.Text;
this.Text_S4.Text = MainForm.pMainWin.Text_M4.Text;
}
private void Btn_SOK_Click(object sender, EventArgs e)
{
}
}
}
1.主窗体中调用子窗体控件
在主窗体中调用子窗体的控件很简单,只要在主窗体中创建子窗体的时候保留所创建的子窗体对象即可。
2.子窗体中调用主窗体控件
方法如下:
(1) 在主窗体类中定义一个静态数据成员,来保存当前主窗体对象,如下:
public static MainForm pMainWin = null;
(2) 然后在主窗体构造函数中,给上述静态成员初始化,如下:
public MainForm()
{
InitializeComponent();
pMainWin = this;//这里是初始化
}
(3) 在子窗体中调用主窗体,可以通过如下方式:”主窗体类名.pMainWin”,例如:
this.Text_S3.Text = MainForm.pMainWin.Text_M1.Text;
this.Text_S4.Text = MainForm.pMainWin.Text_M4.Text;
3.以上所做的,只是让你能够访问当前主窗体对象或子窗体对象,如果想操作控件,可以直接修改控件的成员访问符,即可以把”private”修改成”public”。当然最好的还是可以用增加公有属性的做法,这样不会破坏类本身的封装。如下:
public string Text_Box
{
get {return Text_S2.Text;}
set { Text_S2.Text = value; }
}
4.现在把一个小示例的代码粘贴如下:
(1)建立主窗体,添加四个文本框控件:Text_M1,Text_M4,用来主窗体中输入数据传给子窗体;Text_M2,Text_M3,用来显示子窗体中传过来的数据。一个按钮Btn_M1用来调用子窗体。Btn_M1按钮事件中添加代码,现把主窗体代码显示如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace MainSubControl
{
public partial class MainForm : Form
{
//在主窗口类中定义一个静态成员,来保存当前主窗体对象,以便子窗体中调用其控件
//子窗体调用时,通过"主窗体类名.pMinWin",然后在其构造函数中,给静态成员初始化.
public static MainForm pMainWin = null;
public MainForm()
{
InitializeComponent();
pMainWin = this;
}
private void Btn_M1_Click(object sender, EventArgs e)
{
SubForm SubFormE = new SubForm();
//由于下面要调用到子窗体SubFormE的Text_S1控件,所以需要把Text_S1控件的成员访问符号由private改成public即可.
//调用子窗体SubFormE的Text_S2控件是通过增加了一个public属性来调用的,不是修改访问修饰符号,当然也可以这么做
//也可以通过增加public方法来实现.
if (SubFormE.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
this.Text_M2.Text = SubFormE.Text_S1.Text;
this.Text_M3.Text = SubFormE.Text_Box;
return;
}
return;
}
private void Btn_MExit_Click(object sender, EventArgs e)
{
this.Close();
}
private void MainForm_Load(object sender, EventArgs e)
{
}
}
}
(2)建立子窗体,添加四个文本框:Text_S1,Text_S2,用来子窗体输入数据传给主窗体来显示;Text_S3,Text_S4,用来显示主窗体传过来的数据。一个确定按钮Btn_SOK。先把子窗体类代码显示如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace MainSubControl
{
public partial class SubForm : Form
{
//在子窗体中定义一个主窗体类的一个私有成员,来保存当前主窗体对象.
//为其构造函数增加一个主窗口的参数来初始化,子窗体中调用,用"this.pParentWin"
//18private MainForm pParentWin = null;
public SubForm()
{
InitializeComponent();
//18pParentWin = WinMain;
}
public string Text_Box
{
get {return Text_S2.Text;}
set { Text_S2.Text = value; }
}
private void SubForm_Load(object sender, EventArgs e)
{
this.Text_S3.Text = MainForm.pMainWin.Text_M1.Text;
//18this.Text_S4.Text = this.pParentWin.Text_M4.Text;
this.Text_S4.Text = MainForm.pMainWin.Text_M4.Text;
}
private void Btn_SOK_Click(object sender, EventArgs e)
{
}
}
}