C#培训2019-10-22第六课事件的练习题——两个窗体通过事件传值;将类与类分开

一、两个窗体之间通过事件传值:Form2是在Form1中new出来的。当Form2按钮按下时,可以将按钮的Text信息传递给Form1显示。
解决:
①事件的定义:在Form2中。由于实际出发事件是在Form2中,所以是在Form2中定义。
		// 定义hander,就可以自定义事件的传值个数和类型
		public delegate void TriggerEventHander( string lblInfo );
		// 定义事件
		public event TriggerEventHander TriggerEvent;
②事件的触发:在Form2的按钮Click事件中对TriggerEvent事件进行触发。
	void btnTriggerEvent_Click( object sender, EventArgs e )
		{

			TriggerEvent( ( (Button)sender ).Text );
		}
③事件的挂载:在Form1中New出Form2的对象后进行挂载事件
			m_frm2 = new Form2();
			m_frm2.TriggerEvent += ShowInformation;

同时写出挂载的方法

		void ShowInformation( string lblInfor )
		{
			lblShowInfo.Text = lblInfor;
		}
二、另一种方式———多一个Event类(静态)
1、在Form2中click事件发生时:不是触发事件,是调用“Event”类中的一个方法。在方法中触发事件。
上述事件是在“Event”类中定义的(实际上在哪定义都可以,只要挂载的“人”能认得这个“人”,放在“Event”类中定义主要为了将关系分的更开);事件触发执行的方法是在“Event”类中;事件的挂载是在Form1中(谁接收信息,谁挂载
好处:①因为事件不(应该)属于任何一个Form,单独拿到Form类中,就可以将各个之间的关系分的更清楚。
②可以将Form1和Form2中的Click事件都放到Event.cs中来,这样就分的更清楚了。
③更进一步的,Form2甚至可以不在Form1中new出来,在Programe.cs中new,这样的话Form1和Form1就完全分开了。

如在Programe.cs中:

static void Main()
		{
			Application.EnableVisualStyles();
			Application.SetCompatibleTextRenderingDefault( false );
			
			//此处new出 Form2以后就用不到这个“m_frm2 ”名字了,
			//以后出来只是在类中挂载了事件,执行了方法后自己出来的。
			Form2 m_frm2 = new Form2();
			
			Application.Run( new Form1() );
		}

Form2中的挂载以及对应的方法

		public Form2()
		{
			InitializeComponent();
			EventCenter.ShowForm2Event += ShowForm2Event;
		}

		void ShowForm2Event()
		{
			Show();
		}
2、同时,在Event类中,有一个Show窗体(Form2)的事件(静态事件)。Form1在new完Form2以后,调用Event类中方法来触发“ShowForm2”的事件。
“ShowForm2”的事件 在“Event”类中定义;件触发执行的方法是在“Event”类中;事件的挂载是在Form2中(谁接收信息,谁挂载
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值