c# wpf wpf 子窗口调用父窗口(或者父窗口响应子窗口事件)
2011-11-29 16:10
1121 查看
在winForm应用程序中,窗口间数据的传递是最多的应用之一,尤其是在管理软件当中。
窗口的数据传递,有多种方式,在这篇随笔中主要是阐述一下利用委托如何来传递数据。
在本实例程序中,有两个窗体:一个主窗体FrmMain,接收数据;一个子窗体FrmChild,传出数据,UI如下:
![](http://images.cnblogs.com/cnblogs_com/inforasc/WindowsLiveWriter/winForm_14064/image_thumb.png)
![](http://images.cnblogs.com/cnblogs_com/inforasc/WindowsLiveWriter/winForm_14064/image_thumb_1.png)
在主窗体中,[设置]按钮,弹出子窗体,在文本框中输入相应的值后,点击[确认]返回到主窗体,同时返回数据至主窗体。
具体代码实现如下:
[b]一、定义事件类:[/b]
[b]二、在子窗体中设计如下代码:[/b]
[b]三、设计主窗体代码:[/b]
主窗体中[设置]按钮的代码如下:
主要用来打开子窗体,绑定事件。
在FrmChild_PassDataBetweenForm()方法中接收PassDataWinFormEventArgs实例传递回来的数据,故此FrmChild_PassDataBetweenForm()代码如下:
[b]四、后记:[/b]
窗口的数据传递,有多种方式,在这篇随笔中主要是阐述一下利用委托如何来传递数据。
在本实例程序中,有两个窗体:一个主窗体FrmMain,接收数据;一个子窗体FrmChild,传出数据,UI如下:
![](http://images.cnblogs.com/cnblogs_com/inforasc/WindowsLiveWriter/winForm_14064/image_thumb.png)
![](http://images.cnblogs.com/cnblogs_com/inforasc/WindowsLiveWriter/winForm_14064/image_thumb_1.png)
在主窗体中,[设置]按钮,弹出子窗体,在文本框中输入相应的值后,点击[确认]返回到主窗体,同时返回数据至主窗体。
具体代码实现如下:
[b]一、定义事件类:[/b]
public class PassDataWinFormEventArgs : EventArgs { public PassDataWinFormEventArgs() { // } public PassDataWinFormEventArgs(string refName, string refPlace, int refAge) { this._name = refName; this._place = refPlace; this._age = refAge; } private string _name; private string _place; private int _age; public string Name { get { return _name; } set { _name = value; } } public string Place { get { return _place; } set { _place = value; } } public int Age { get { return _age; } set { _age = value; } } }
通过PassDataWinFormEventArgs的实例,传递数据。
[b]二、在子窗体中设计如下代码:[/b]
//添加一个委托 public delegate void PassDataBetweenFormHandler(object sender, PassDataWinFormEventArgs e); //添加一个PassDataBetweenFormHandler类型的事件 public event PassDataBetweenFormHandler PassDataBetweenForm;
书写子窗体确认按钮的代码如下:
private void bbtOK_Click(object sender, EventArgs e) { string name,place; int age; name = txtName.Text; place = txtPlace.Text; Int32.TryParse(txtAge.Text, out age); PassDataWinFormEventArgs args = new PassDataWinFormEventArgs(name, place, age); PassDataBetweenForm(this, args); this.Dispose(); //释放资源,在WPF中没有此方法,用this.Close()关闭窗口 }
[b]三、设计主窗体代码:[/b]
主窗体中[设置]按钮的代码如下:
private void bbtSetup_Click(object sender, EventArgs e) { FrmChild frmChild = new FrmChild(); frmChild.PassDataBetweenForm += new FrmChild.PassDataBetweenFormHandler(FrmChild_PassDataBetweenForm); frmChild.Show(); frmChild.Activate(); }
主要用来打开子窗体,绑定事件。
在FrmChild_PassDataBetweenForm()方法中接收PassDataWinFormEventArgs实例传递回来的数据,故此FrmChild_PassDataBetweenForm()代码如下:
private void FrmChild_PassDataBetweenForm(object sender,PassDataWinFormEventArgs e) { this.txtName.Text = e.Name; this.txtPlace.Text = e.Place; this.txtAge.Text = e.Age.ToString(); }
[b]四、后记:[/b]
利用委托进行数据传递,有一个很大的优点就是,可以在任何窗体中调用子窗体,而不用修改子窗体内部的设计,从而达到高度复用子窗体。
相关文章推荐
- C#前后台调用js代码&父窗体执行iframe的保存事件&&弹出窗口中刷新父页面中的iframe页面
- C#实现快捷键(系统热键)响应 以及事件调用
- C# 在winform或者wpf中显示控制台窗口
- 转载:C#实现快捷键(系统热键)响应 以及事件调用
- 【C#】无损转换Image为Icon 【C#】组件发布:MessageTip,轻快型消息提示窗 【C#】给无窗口的进程发送消息 【手记】WebBrowser响应页面中的blank开新窗口及window.close关闭本窗体 【手记】调用Process.EnterDebugMode引发异常:并非所有引用的特权或组都分配给呼叫方 【C#】DataRowState演变备忘
- C#中按钮响应事件简单或者相似响应函数的书写。
- WPF实现C#中DoEvent事件(可实现延迟响应事件)
- C# 简单文件备份工具v1.1(系统热键响应、简单调用窗体)
- C#可调用API接口来获取窗口句柄,代码如下:
- c#中怎样实现当一个类实例的属性值改变时,触发事件调用另一个方法?
- C#中通过父窗口调用子窗口的问题
- C#中运用事件实现异步调用
- WPF窗口的关闭、最大化、最小化、拖动事件
- c#事件处理中事件信息EventArgs的使用和类型内部事件委托delegate的调用
- wpf中重写OnClosing窗口关闭事件报错
- C# 由于代码已经过优化或者本机框架位于调用堆栈之上,无法计算表达式的值
- 关于Java窗口响应事件 windowsDeactivated
- JAVA作业 窗口响应鼠标事件:鼠标在画布上画圆
- wpf 窗口激活事件顺序
- C#中Form的Paint事件响应方法与重载虚方法OnPaint()的区别