C#实现Winform间的数据交互的三种方法
2011-07-24 02:08
886 查看
使用.NET编写winform程序,比较常见的一种情况就是如何实现Form间的数据交互,下面就简单总结一下常见的几种数据交互方式:
(1)修改子窗体的构造函数:简单地说就是通过修改子窗体Form的构造函数,如下所示: public Form2(string Para1, ArrayList List1, TextBox textBox1, Form Form1)
{
InitializeComponent();
}
复制代码上面的例子中,为子窗体Form2添加了4个参数,分别是:字符串Para1,字符数组List1,文本控件textBox1和父窗体Form1,下面简单区分一下它们各自的特点:
<1> 字符串:单向的值传递,在子窗体中不能通过修改此参数的值来间接改变父窗体中的数据。
<2> 字符数组:引用型传递,可以通过将父子窗体中不同的成员变量指向相同的数组,即可实现变更一方,同时更新对方的数据。
<3> 控件: 引用型传递,可以通过修改该控件的数据来直接达到控制父窗体中该控件数据的目的。
<4> 窗体: 这个最直接,直接将父窗体传递到子窗体中,我们可以方便地在子窗体中修改父窗体中所有授权为public的数据。
(2)给窗体添加属性或方法:
获取或设置拥有此窗体的窗体。若要使某窗体归另一个窗体所有,请为其 Owner 属性分配一个对将成为所有者的窗体的引用。当一个窗体归另一窗体所有时,它便随着所有者窗体最小化和关闭。例如,如果 Form2 归窗体 Form1 所有,则关闭或最小化 Form1 时,也会关闭或最小化 Form2。并且附属窗体从不显示在其所有者窗体后面。可以将附属窗体用于查找和替换窗口之类的窗口,当选定所有者窗体时,这些窗口不应消失。若要确定某父窗体拥有的窗体,请使用OwnedForms属性。
我们可以通过下面的方式来确定这种从属的窗体关系: Form2 form = new Form2();
form.Owner = this;
form.ShowDialog();
或者
Form2 form = new Form2();
form.ShowDialog(this);
复制代码定了从属关系以后,我们就可以通过在Form的load事件中或者通过定义public的属性或者方法来彼此进行数据修改操作,简单操作如下: Form1 pareForm = (Form1)this.Owner;
this.listData1 = pareForm.ListData2;
复制代码(3)通过委托的方法:
相对以上两种方法来说,这种方法可能较复杂一些,但基本思路是一样的,需要修改的地方如下:
<1> 在Form2.cs中添加委托函数定义:public delegate void SendFun(string str);
<2> 在Form2.cs中添加委托示例:public event SendFun SendToParent;
<3> 在Form2.cs中添加一个按钮,并添加其事件如下: private void button1_Click(object sender, EventArgs e)
{
if (Send != null)
{
Send(this.textBox1.Text);
}
}
复制代码<4> 在Form1.cs中添加方法RecvInfo()方法如下: private void RecvInfo (string str)
{
textBox1.Text = str;
}
复制代码<5> 在Form1.Designer.cs中的InitializeComponent()方法中添加委托实例定义:this.myForm.Send += new Example3_Form2. SendFun (RecvInfo);
复制代码通过上面五步操作,即可达到Form间的通信的目的。希望这个总结能够对大家有所帮助
(1)修改子窗体的构造函数:简单地说就是通过修改子窗体Form的构造函数,如下所示: public Form2(string Para1, ArrayList List1, TextBox textBox1, Form Form1)
{
InitializeComponent();
}
复制代码上面的例子中,为子窗体Form2添加了4个参数,分别是:字符串Para1,字符数组List1,文本控件textBox1和父窗体Form1,下面简单区分一下它们各自的特点:
<1> 字符串:单向的值传递,在子窗体中不能通过修改此参数的值来间接改变父窗体中的数据。
<2> 字符数组:引用型传递,可以通过将父子窗体中不同的成员变量指向相同的数组,即可实现变更一方,同时更新对方的数据。
<3> 控件: 引用型传递,可以通过修改该控件的数据来直接达到控制父窗体中该控件数据的目的。
<4> 窗体: 这个最直接,直接将父窗体传递到子窗体中,我们可以方便地在子窗体中修改父窗体中所有授权为public的数据。
(2)给窗体添加属性或方法:
获取或设置拥有此窗体的窗体。若要使某窗体归另一个窗体所有,请为其 Owner 属性分配一个对将成为所有者的窗体的引用。当一个窗体归另一窗体所有时,它便随着所有者窗体最小化和关闭。例如,如果 Form2 归窗体 Form1 所有,则关闭或最小化 Form1 时,也会关闭或最小化 Form2。并且附属窗体从不显示在其所有者窗体后面。可以将附属窗体用于查找和替换窗口之类的窗口,当选定所有者窗体时,这些窗口不应消失。若要确定某父窗体拥有的窗体,请使用OwnedForms属性。
我们可以通过下面的方式来确定这种从属的窗体关系: Form2 form = new Form2();
form.Owner = this;
form.ShowDialog();
或者
Form2 form = new Form2();
form.ShowDialog(this);
复制代码定了从属关系以后,我们就可以通过在Form的load事件中或者通过定义public的属性或者方法来彼此进行数据修改操作,简单操作如下: Form1 pareForm = (Form1)this.Owner;
this.listData1 = pareForm.ListData2;
复制代码(3)通过委托的方法:
相对以上两种方法来说,这种方法可能较复杂一些,但基本思路是一样的,需要修改的地方如下:
<1> 在Form2.cs中添加委托函数定义:public delegate void SendFun(string str);
<2> 在Form2.cs中添加委托示例:public event SendFun SendToParent;
<3> 在Form2.cs中添加一个按钮,并添加其事件如下: private void button1_Click(object sender, EventArgs e)
{
if (Send != null)
{
Send(this.textBox1.Text);
}
}
复制代码<4> 在Form1.cs中添加方法RecvInfo()方法如下: private void RecvInfo (string str)
{
textBox1.Text = str;
}
复制代码<5> 在Form1.Designer.cs中的InitializeComponent()方法中添加委托实例定义:this.myForm.Send += new Example3_Form2. SendFun (RecvInfo);
复制代码通过上面五步操作,即可达到Form间的通信的目的。希望这个总结能够对大家有所帮助
相关文章推荐
- C#实现Winform间的数据交互的三种方法
- C#实现Winform间的数据交互的三种方法
- C#实现Winform间的数据交互的三种方法
- C#实现Winform间的数据交互的三种方法
- C#实现Winform窗口间数据交互的三种方法介绍
- C#实现Winform间的数据交互的三种方法
- 比较C#三种方法实现读取Execl数据到数据库
- C# winform程序实现分页的三种方法
- 【转】c#实现在两个窗体(winform)之间传输数据或变量的方法
- C#在WinForm中使用WebKit传递js对象实现与网页交互的方法
- C#在WinForm中使用WebKit传递js对象实现与网页交互的方法
- .net网站与Winform窗体的数据交互(JS调用Winform后台方法实现)
- sql server 关于表中只增标识问题 C# 实现自动化打开和关闭可执行文件(或 关闭停止与系统交互的可执行文件) ajaxfileupload插件上传图片功能,用MVC和aspx做后台各写了一个案例 将小写阿拉伯数字转换成大写的汉字, C# WinForm 中英文实现, 国际化实现的简单方法 ASP.NET Core 2 学习笔记(六)ASP.NET Core 2 学习笔记(三)
- C#实现窗体与子线程的交互的方法
- C#实现json格式数据解析功能的方法详解
- C#实现WinForm禁止最大化、最小化、双击标题栏、双击图标等操作的方法
- C# Winform利用POST传值方式模拟表单提交数据(Winform与网页交互)
- C# WinForm下DataGridView单选按钮列和支持三种选择状态的复选框列的实现
- C#实现导出List数据到xml文件的方法【附demo源码下载】
- AngularJS实现自定义指令与控制器数据交互的方法示例