打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
C#使用Event在窗体之间传递消息和参数
C#使用Event在窗体之间传递消息和参数
有时候需要在两个窗体之间传递事件或者参数,例如一个登陆窗体,要将用户名和密码传递给主窗体,使用Event不但可以使主窗体在登录窗体关闭后再显示出来,还可以将数据传递到主窗体,代码很简单,要注意的是要判断事件是否为空,不然会出现空指向异常:
FormLogin代码:
C#代码
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace Login
{
public delegate void myDele(string id, string pwd);//声明代理
public partial class FormLogin : Form
{
public event myDele myEvent;//声明事件
public FormLogin()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)//按钮事件
{
if (myEvent != null)//一定要判断事件是否为空,否则会出现空指向异常
{
myEvent(textBox1.Text, textBox2.Text);//触发事件
}
Close();
}
}
}
Form1代码:
C#代码
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace Login
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
FormLogin flogin = new FormLogin();
flogin.myEvent += new myDele(flogin_myEvent);//添加事件
flogin.ShowDialog(this);//显示窗口
}
void foglin_myEvent(string id, string pwd)//事件处理函数
{
label1.Text = id;
label2.Text = pwd;
}
}
}
Login窗体
主窗体:
程序执行流程是:实例化主窗体时,先将Login窗体以对话框方式显示出来;在Button1按钮事件中,因为Form1中为FormLogin窗体的MyEvent添加了事件foglin_myEvent,因此在Login中执行myEvent时会调用foglin_myEvent,
并把id和pwd作为参数,这时就可以在foglin_myEvent函数中接受这些从Login窗体中来的参数了。
----------------------------------------------------------------------------------------------------------------------------------
C#子窗口与父窗口交互(使用委托和事件)
http://www.2cto.com/kf/201307/227621.html目标:在子窗口Form2上单击按钮时向Form1传递一组自定义参数,并显示在父窗口Form1上。
方法:有很多方法,这里只介绍委托和事件的实现方式。
思路:Form2中定义事件,Form1创建Form2并订阅事件;Form2触发事件后传递参数到Form1,Form1处理参数。
Form1代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
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代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
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;
}
}
}
实验效果:
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
C#窗体间通讯的几种处理方法
原 100个Java经典例子(1-10)初学者的利器高手的宝典JavaSE
C#程序窗体间使用回调事件方式通讯示例
c# 类操作 窗体
c# winform 用子窗体刷新父窗体,子窗体改变父窗体控件的值两种方法
c#窗体传值 - 春哥也编程 - 博客园
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服