版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/daybreak___/article/details/82809529
方法一:利用委托实时传值
委托的简单的理解
在C#中委托是重点也是难点,想要对委托有非常深入的了解可以详细参考这篇博客:通俗理解C#委托和事件.
这里我们只要简单记住:
1、委托是一种用户自定义类型
2、委托是方法的抽象,也就是说,我们定义的委托存储的是一系列具有相同签名和相同的返回类型的方法的地址。调用委托的时候,委托包含的所有方法将被执行。
委托类型的定义
1、以delegate关键字开头
2、由返回类型+委托类型名+参数列表
public delegate void del_Value(string str_Value);
利用委托实现子窗体frmSub向父窗体frmMain实时传值
实现效果:
frmSub代码:
public delegate void del_Value(string str_Value);//声明一个委托类型
public partial class frmSub : Form
{
public del_Value _del_Value;//声明del_Value委托的传递方法
public frmSub(del_Value Value)
{
this._del_Value = Value;//实现将值传递到方法内
InitializeComponent();
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
this._del_Value(textBox1.Text.Trim());//当值发生改变时,将值传递到方法内
}
}
frmMain代码:
public frmMain()
{
InitializeComponent();
}
private void btnOpenfrmSub_Click(object sender, EventArgs e)
{
frmSub fs = new frmSub(showValue);//调用委托,委托中包含的showValue方法将被执行
fs.Show();//点击按钮打开frmSub
}
void showValue(string value)//方法的具体实现,并获取frmSub的传递值
{
textBox1.Text = value;//将传递过来的值赋予textBox1
}
}
方法二:使用全局变量传值
这种方法实现起来非常简单,这里示例为frmMain向frmSub传值。当点击frmSub中的按钮时,将frmMain中的值传递过来。
代码如下:
frmMain:
public partial class frmMain : Form
{
public static string str="123abc";//声明全局变量
frmSub:
private void button1_Click(object sender, EventArgs e)
{
textBox2.Text = frmMain.str;
}
多说几句
方法一和方法二都可以实现双向传值。对于实时变化的值采用委托的方法是一个不错的选择。比如,在做一些和硬件相关的数据采集的项目时非常有用,可以实时绘制数据波形。
关于窗体传值还有很多其他方法,如构造参数参数传值、公共属性传值,公共静态变量传值等。这些方法等以后有时间再研究。