本文共 3497 字,大约阅读时间需要 11 分钟。
Form2图:
public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { Form2 form2 = new Form2(this); form2.ShowDialog(this); } void form2_ShowMessageEventHandler(object sender, MessageEventArgs e) { this.richTextBox1.Text = e.MessageString; } }
Form2中定义了Form1的引用。
public partial class Form2 : Form { public Form2() { InitializeComponent(); } private Form1 form1; public Form2(Form1 form1) { InitializeComponent(); this.form1 = form1; } private void button1_Click(object sender, EventArgs e) { form1.richTextBox1.Text = "Form2的消息"; } }
运行,点击Form1的button,Form2窗口显示出来,再点击Form2的button,Form1的richtextbox1内容为:"Form2的消息"。
如下图: 这样也实现了要求。这样的话为了使Form2中能访问到Form1的richtextbox1,必须要把richtextbox1定义成Public。richtextbox1是Form1的私有成员,一旦公布出来破坏了封装性。而且假如,在软件发布后,决定不要Form1了,又新建另一个FormNew显示Fom2,那么就要去删掉Form1的同时还要再打开Form2,重新定义一个FormNew的引用。改动太多,不符合开放封闭原则。 那么修改它,按照迪米特法则修改。通过第三者转发这个调用,我们利用事件来完成。修改代码如下: 增加一个传递的类:public class MessageEventArgs:EventArgs { private string messageString = string.Empty; public MessageEventArgs(string message) { this.messageString = message; } public string MessageString { get { return messageString; } } }
Form2中定义事件
public partial class Form2 : Form { public event EventHandlerShowMessageEventHandler; public Form2() { InitializeComponent(); } //private Form1 form1; //public Form2(Form1 form1) //{ // InitializeComponent(); // this.form1 = form1; //} //private void button1_Click(object sender, EventArgs e) //{ // form1.richTextBox1.Text = "Form2的消息"; //} private void button1_Click(object sender, EventArgs e) { if (this.ShowMessageEventHandler != null) { ShowMessageEventHandler(this, new MessageEventArgs("Form2的消息")); } } }
Form1注册这个事件,并绑定方法。
public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { Form2 form2 = new Form2(); form2.ShowMessageEventHandler += new EventHandler(form2_ShowMessageEventHandler); form2.ShowDialog(this); //Form2 form2 = new Form2(this); //form2.ShowDialog(this); } void form2_ShowMessageEventHandler(object sender, MessageEventArgs e) { this.richTextBox1.Text = e.MessageString; } }
这样运行,结果如下:
显然,后者的耦合性大大降低,即使删除掉Form1,要改用另一个FormNew,不用去改动Fom2,只需在FomrNew中重新注册事件,并绑定方法就可以了。也增强了Form2的复用性。一举多得何乐而不为。 代码:转载地址:http://swfua.baihongyu.com/