C#窗体间通讯的几种处理方法

王朝学院·作者佚名  2016-05-17
窄屏简体版  字體: 小  |  中  |  大  |  超大  

C#窗体间通讯的几种处理方法应用程序开发中,经常需要多窗体之间进行数据通信,写几个例子,把几种常用的通信方式总结一下:

主窗体Form1是一个ListBox,单击选中某列时,弹出窗体Form2,Form2中两个控件,一个是TextBox,显示选中的该列的文本,另一个是按钮,点击时将修改后的值回传,且在Form1中修改相应的列的文本,同时Form2关闭。

方法一:传值

最先想到的,Form2构造函数中接收一个string类型参数,即Form1中选中行的文本,将Form2的TextBox控件的Text设置为该string,即完成了Form1向Form2的传值。当Form2的AcceptChange按钮按下,需要修改Form1中ListBox中相应列的值,因此可以考虑同时将Form1中的ListBox控件当参数也传入Form2,所有修改工作都在Form2中完成,根据这个思路,Form2代码如下:C#代码publicpartialclassForm2:Form{PRivatestringtext;privateListBoxlb;privateintindex;//构造函数接收三个参数:选中行文本,ListBox控件,选中行索引publicForm2(stringtext,ListBoxlb,intindex){this.text=text;this.lb=lb;this.index=index;InitializeComponent();this.textBox1.Text=text;}privatevoidbtnChange_Click(objectsender,EventArgse){stringtext=this.textBox1.Text;this.lb.Items.RemoveAt(index);this.lb.Items.Insert(index,text);this.Close();}}Form1中new窗体2时这么写:

C#代码publicpartialclassForm1:Form{intindex=0;stringtext=null;publicForm1(){InitializeComponent();}privatevoidlistBox1_SelectedIndexChanged(objectsender,EventArgse){if(this.listBox1.SelectedItem!=null){text=this.listBox1.SelectedItem.ToString();index=this.listBox1.SelectedIndex;//构造Form2同时传递参数Form2form2=newForm2(text,listBox1,index);form2.ShowDialog();}}

OK,方法一的解决方法就是这样,好处是直观,需要什么就传什么,缺点也是显而易见的,如果窗体1中需要修改的是一百个控件,难道构造的时候还传100个参数进去?况且如果其他窗体仍然需要弹Form2,那Form2就废了,只能供窗体1使用,除非写重载的构造函数,不利于代码的复用,继续看下一个方法。

方法二:继承这个方法我试了很多次,继承的确可以做,但是麻烦不说,还不方便,因此个人认为如果为了互相操作数据而使用继承,是不合适的,但既然是个方法,就扔出来看看,实际作用≈0。Form2:C#代码//声明Form2继承于Form1publicpartialclassForm2:Form1{publicintindex;publicListBoxlb;publicForm2(stringtext){//将继承过来的listBox设置为不可见this.listBox1.Visible=false;InitializeComponent();this.textBox1.Text=text;}privatevoidbtnChange_Click(objectsender,EventArgse){stringtext=this.textB

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航