C#不同窗体间通信,数据传递
来源:互联网 发布:java开发工具 百度云 编辑:程序博客网 时间:2024/04/28 04:08
在一个项目中,很多时候都需要在窗体间进行数据传递和通信,最觉见的是父子窗体之间的数据传递,比如登录ID,各个窗体都需要知道。有很多文章都写了这方面的问题,提出很多优秀的方法,鄙人不才,搜了一些资料之后,准备献丑了。
1. 如果很多窗体都需要用到某一窗体的东西,比如登录窗体记录的ID,为了避免每个窗体都去查询数据库,可以把这些公共变量或信息写入配置文件,每个窗体去读配置文件即可。
2. 如果共享信息的窗体不多,则对于兄弟窗口,可以通过其共同的父窗体来传递数据,此时父窗体如果是容器,只需要在本窗口中定义一个指向父窗体的变量即可,当然不需要NEW的。
如:父窗体form1两个子窗体subform1 subform2,均在由父窗体通过NEW得到,且均定义为全局公共变量,即在所有成员函数外定义为public。我们希望把子窗体1即subform1中textbox的内容传递到子窗体2即subform2的textbox中,可以这样做:
先设父窗体的属性mdicontainer=true。
在subform2中:Form1 parentform=(Form1)this.mdiparent;
此时,在subform2中便可以通过:this.textbox.text=parentfrom.subform1.textbox.text ,将subform1 中textbox的值赋给了subform2的textbox。
同理,也可以在subform2中直接修改subform1.textbox的值:parentfrom.subform1.textbox.text=”XXXX”。当然这样做的前提是这些控件如textbox都必须声明成public。
3. 父子窗体间传递数据。form1是父窗体,form2是子窗体,form2由form1直接NEW得到,两窗体中均含有public型的textbox1。父窗体向子窗体传递数据是相当容易的,只需把子窗体中的控件或变量声明为public,直接在窗体中修改即可。但子窗体向父窗体传递数据就没那么简单了。当然我们可以采用上述的第二种方法,不过此时父窗体是容器,如果里面还要放其它控件,必须用panel装起来。如果不想父窗体成为容器,可以通过把父窗体通过子窗体的构造函数传递给子窗体,子窗体中有一个变量指向窗体即可。子窗体构造函数:
public Form1 frm1;
public Form2(Form1 frm1)
{
InitializeComponent();
this.frm1 = frm1;
}
在父窗体中new子窗体:Form2frm2 = new Form2(this);之后就可以随便修改子窗体中声明为public的变量或控件了,如frm2.textBox1.Text=”good”;。通过子窗体的构造函数我们可以看到,子窗体有一个变量指向父窗体,相当于一个指针。这样在子窗体中可以直接访问父窗体: this.frm1.textBox1.Text ="good";我们返回去看发现父窗体的textbox1.text确实变成了good。如果在窗体中将frm2定义为public型,那么就可以循环访问了。如this.frm1.frm2.frm1.frm2.frm1.frm2….无穷下去。所以尽量避免将其定义为全局public型,同时不要写出上述循环访问的语句。显然,我们可以用这种方法代替第二种方法,即使父窗体不是容器,我们也照样可实现兄弟窗体间数据的传递,当然前提是窗体都处于打开状态。假设现在又有一个子窗体form3,此时,必须在父窗体中把两个子窗体都定义成public:Form2frm2 = new Form2(this) ; Form3frm3 =newForm3(this)。如果Form2访问Form3,在Form2中,通过如下方式:string text=this.frm1.frm3.textbox1.text便取得了Form3中textbox1的text值。在Form2中修改Form3中textbox1的text值也同理可以做到。
- C#不同窗体间通信,数据传递
- C#不同窗体间数据传递
- C#不同窗体之间的数据传递
- C#窗体间传递数据
- C# 窗体间传递数据
- C#中不同窗体之间的数据传递
- C#窗体间传递复杂数据
- c#窗体间传递复杂数据
- Visual C#实现不同窗体间数据传递之三
- C#窗体之间传递数据
- 窗体间数据传递
- C#中窗体间传递数据的几种方法
- C#中窗体间传递数据的几种方法
- C#中窗体间传递数据的几种方法
- C#中窗体间数据传递的两种方法
- C#中窗体间传递数据的几种方法
- C#窗体间数据传递的四种方法
- 【转】c#中如何在两个窗体间传递数据
- 今天对我来说一个特殊的日子
- 控件注册批处程序
- Asp.net对文件夹和文件的操作类
- 进一步海阔天空—读优势富集效应有感
- ASP.NET与sql server开发中DateTime型数据的处理方法
- C#不同窗体间通信,数据传递
- 线程同步之Win32API的Wait函数
- C# 中如何定义和接收消息
- VS.net 2005的卸载顺序
- 我们80后招谁惹谁了?
- 数据类型之间的转换
- OSGI在J2EE架构里到底能充当什么角色?
- Bjarne Stroustrup关于C++的讲座
- 删除C盘无用文件