窗体间传值 委托应用

  窗体间传值,虽然是一件很简单的事情。也是为了学习一下委托。

  在visual studio 2012 上建立了两个窗体,MainFrm 和 ChildFrm 窗体。

 childFrm code:

namespace 窗体间传值
{
public delegate void archiveText(string txt);
public partial class childFrm : Form
{

public archiveText archivetext { get; set; }
public childFrm()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
if (archivetext != null)
{
archivetext(this.textBox1.Text);
}
}


}
}

MainFrm code:

namespace 窗体间传值
{
public partial class MainFrm : Form
{
public MainFrm()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
childFrm f = new childFrm();
f.archivetext = new archiveText(textchange);
f.Show();
}
public void textchange(string txt)
{
this.textBox1.Text = txt;
}
}
}

运行结果:

  大家知道,委托是可以自己创建实例的。

  委托的实例是在父窗体上创建的,那就意味着是不安全的。别人也可以自己去new一个实例。

 所以,解决办法是使用event,它本身 委托的实例。所以可以避免出现的上述情况。

event code childFrm :

public event archiveText archivetext;
public childFrm()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
if (archivetext != null)
{
archivetext(this.textBox1.Text);
}
}

mainFrm code:

childFrm f = new childFrm();
f.archivetext += textchange;
f.Show();

结果如上图:

原文地址:https://www.cnblogs.com/fandong90/p/4646844.html