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

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_41617697/article/details/102677464

一、两个窗体之间通过事件传值: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中(谁接收信息,谁挂载

猜你喜欢

转载自blog.csdn.net/qq_41617697/article/details/102677464