C#子窗口与父窗口交互(使用委托和事件)
目标:在子窗口Form2上单击按钮时向Form1传递一组自定义参数,并显示在父窗口Form1上。
方法:有很多方法,这里只介绍委托和事件的实现方式。
思路:Form2中定义事件,Form1创建Form2并订阅事件;Form2触发事件后传递参数到Form1,Form1处理参数。
Form1代码如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace FormDataInteractive
{
/// <summary>
/// powered by shadu {at} foxmail.com
/// </summary>
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
// 创建Form2,并添加事件处理函数
Form2 frm = new Form2();
frm.DataChange += new Form2.DataChangeHandler(DataChanged);
frm.ShowDialog();
}
public void DataChanged(object sender, DataChangeEventArgs args)
{
// 更新窗体控件
textBox1.Text = args.name;
textBox2.Text = args.pass;
}
}
}
Form2代码如下:
using
System;
using
System.Collections.Generic;
using
System.ComponentModel;
using
System.Data;
using
System.Drawing;
using
System.Linq;
using
System.Text;
using
System.Windows.Forms;
namespace
FormDataInteractive
{
public
partial
class
Form2 : Form
{
// 定义委托
// public delegate void DataChangeHandler(string x); 一次可以传递一个string
public
delegate
void
DataChangeHandler(object
sender, DataChangeEventArgs args);
// 声明事件
public
event
DataChangeHandler DataChange;
// 调用事件函数
public
void
OnDataChange(object
sender, DataChangeEventArgs args)
{
if
(DataChange != null)
{
DataChange(this, args);
}
}
public
Form2()
{
InitializeComponent();
}
private
void
button1_Click(object
sender, EventArgs e)
{
// 触发事件, 传递自定义参数
OnDataChange(this, new
DataChangeEventArgs(textBox1.Text, textBox2.Text));
}
}
/// <summary>
/// 自定义事件参数类型,根据需要可设定多种参数便于传递
/// </summary>
public
class
DataChangeEventArgs : EventArgs
{
public
string
name { get; set; }
public
string
pass { get; set; }
public
DataChangeEventArgs(string
s1, string
s2)
{
name = s1;
pass = s2;
}
}
}
C#子窗口与父窗口交互(使用委托和事件)的更多相关文章
- winform子窗口与父窗口的交互-使用委托与事件
实现子窗口与父窗口的交互,通过父窗口调用并控制子窗口,子窗口也能控制父窗口,使用委托和事件的方法,可以实现. 1.父窗口调用子窗口,并通过子窗口控制父窗口 新建工程,创建两个窗体 显示子窗体的代 ...
- layer子窗口与父窗口传值
layer作为优秀的jquery框架,可以用作弹出组件.日历.分页等,而且实现简单,只有几十k的大小. 此处给出弹出窗口时子窗口与父窗口的传值.js和css这里不展示引入(以下给出目录结构的图片),仅 ...
- Qt学习3---子窗口与父窗口
创建子窗口后,主窗口的头文件需要 #include "子窗口头文件" 子窗口和父窗口之间相互切换 子窗口没有办法处理父窗口,子窗口此时就需要一个信号: * 信号必须有signal ...
- asp.net子窗体与父窗体交互
今天在项目上遇到了这个问题,其实只是window.returnValue的简单应用,不是asp.net的专属内容.作为积累,记录一个简单的实现模型. 图1 用到的文件 从图1中我们可以看到,只用到了 ...
- iframe子页面与父页面元素的访问以及js变量的访问
1.子页面访问父页面元素 parent.document.getElementById('id')和document相关的方法都可以这样用 2.父页面访问子页面元素 document.getEle ...
- 全面兼容的Iframe 与父页面交互操作
父页面 Father.htm 源码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" & ...
- iframe里面的页面调用父窗口,左右窗口js函数的方法
iframe里面的页面调用父窗口,左右窗口js函数的方法 实现iframe内部页面直接调用该iframe所属父窗口自定义函数的方法. 比如有A窗口,A内有个IFRAME B,B里面的装载的是C页面 ...
- js open窗口父子窗口操作
http://zhidao.baidu.com/question/61358246.html?an=0&si=1 js open窗口父子窗口操作 父窗口js代码: function ...
- 使用 SetParent 制作父子窗口的时候,如何设置子窗口的窗口样式以避免抢走父窗口的焦点
原文:使用 SetParent 制作父子窗口的时候,如何设置子窗口的窗口样式以避免抢走父窗口的焦点 制作传统 Win32 程序以及 Windows Forms 程序的时候,一个用户看起来独立的窗口本就 ...
随机推荐
- php-fpm配置优化
PHP配置文件php-fpm的优化 2013/06/28 php, php-fpm 应用加速与性能调优 评论 6,029 本文所涉及的配置文件名为PHP-fpm.conf,里面比较重要的配置项有如 ...
- C++ Builder string相互转换(转)
源:http://www.cnblogs.com/zhcncn/archive/2013/05/20/3089084.html 1. char*->string (1)直接转换 const ch ...
- struts2 里escape="false"的问题?
<s:property value="html" escape="false"/> 没有name 不知道你是怎么取的值 <s:hidden n ...
- Diamond Collector
Diamond Collector 题目描述 Bessie the cow, always a fan of shiny objects, has taken up a hobby of mining ...
- hrbustoj 2130 一笔画(状态压缩)
基础状态压缩 转移方程为 dp[j][i] = min(dp[j][i],dp[k][i^(1<<j)] + dis[k][j]); #include<iostream> #i ...
- adb not responding. if you'd like to
在安装genymotion后启动工程报此错误. 解决方案:把其他虚拟机删掉,然后用genymotion新建一个,启动工程OK.
- php使用curl设置超时的重要性
原文:http://phpquan.com/lamp/php/php-curl-timeout/ 网站登录不了,原因是没有可用的 PHP 子进程来响应新的请求了.这可能是是由于PHP-curl 没有 ...
- 获取一个gridcontrol的数据行数
((DataTable)gc_excel.DataSource).Rows.Count;
- PAT (Advanced Level) 1026. Table Tennis (30)
情况比较多的模拟题. 交了50发的样子才AC......AC之后我的天空星星都亮了. #include<iostream> #include<cstring> #include ...
- Unity3d之剥离alpha通道
unity中, 将图集的 alpha 通道剥离出来可减少包体大小和内存使用大小. 方法是将原来的一张 rgba 图分成一张 rgb 和一张 alpha 图,android上rgb和alpha图均采用e ...