【C#】winform跨窗体传值
|
admin
2023年5月15日 22:0
本文热度 460
|
方式一:使用变量传值
使用静态变量传值,可实现双向传值,但静态变量在类加载的时候分配内存,存储于方法区,一般不会被销毁,在系统不够内存情况下会自动回收静态内存,这样就会引起访问全局静态错误。
public partial class frmMain : Form
{
//声明name为公共静态变量
public static string name= "";
//给静态变量赋值
name= "张三";
}
子窗体frmChild中代码
private void frmChild_Load(object sender, EventArgs e)
{
this.txtname.Text= frmMain.name.Trim();
//赋值
frmMain.name= "李四";
}
使用公共变量,只可实现单向传值。
public partial class frmMain : Form
{
//声明name为公共变量,并赋值
public string name= "张三";
//单击‘行为’按钮的时候会给窗体传值
private void btnChild_Click(object sender, EventArgs e)
{
frmChild f= new frmChild();
//变量传值 ,注意顺序写在ShowDialog()方法之前
f.stationID = this.name;
f.ShowDialog();
}
}
子窗体frmChild中代码
public partial class frmChild: Form
{
//定义公共属性
public string stationID = "";
}
方式二:使用委托传值
通过子窗体声明委托,父窗体实现委托,通过子窗体向父窗体传值。
窗体设计如下:
public partial class frmChild : Form
{
//1、声明一个委托
public delegate void setTextValue(string txt);
//2、声明一个委托类型的事件
public event setTextValue setFormTextValue;
public frmChild()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
setFormTextValue(textBox1.Text);
}
}
父窗体代码如下:
public partial class frmFather : Form
{
public frmFather()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
frmChild c = new frmChild();
c.setFormTextValue += setLable;
c.Show();
}
public void setLable(string txt)
{
this.label1.Text = txt;
}
}
输入字符,点击发送按钮,运行结果如下:
思考一下,如果通过委托实现父窗体向子窗体传值?
该文章在 2023/5/15 22:00:50 编辑过