//子窗体 #region 自定义事件 /*定义事件参数类*/ public class clickButtonEventArgs : EventArgs { public readonly string KeyToRaiseEvent; public clickButtonEventArgs(string keyToRaiseEvent) { KeyToRaiseEvent = keyToRaiseEvent; } } /*定义委托声明*/ public delegate void clickButtonEventHandler(object sender, clickButtonEventArgs e); //用event关键字声明事件对象 public event clickButtonEventHandler clickUerEvent; //事件触发方法 protected virtual void onClickButtonEvent(clickButtonEventArgs e) { if (clickUerEvent != null) { clickUerEvent(this, e); } } //引发事件 private void RaiseEvent(string keyToRaiseEvent) { clickButtonEventArgs e = new clickButtonEventArgs(keyToRaiseEvent); onClickButtonEvent(e); } #endregion // 主窗体: #region 订阅自定义控件被点击的自定义事件 /// <summary> /// 订阅事件 /// </summary> /// <param name="evenSoure"></param> public void Subscribe(UserBaseNullDeviceInfo evenSource) { evenSource.clickUerEvent += EvenSource_clickUerEvent; } /// <summary> /// 取消订阅事件 /// </summary> /// <param name="evenSoure"></param> public void UnSubscribe(UserBaseNullDeviceInfo evenSource) { evenSource.clickUerEvent -= EvenSource_clickUerEvent; } /// <summary> /// 事件方法:自定义控件panel_in被点击 响应事件 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void EvenSource_clickUerEvent(object sender, UserBaseNullDeviceInfo.clickUerBaseNullEventArgs e) { string str = e.KeyToRaiseEvent; //获取当前点击的自定义控件的label_Number showControl(); foreach (UserBaseNullDeviceInfo item in flowLayoutPanel_DeviceConfig.Controls) { if (item.m_strDevNumber == str) //遍历流控件中的与产生自定义事件的自定义用户控件比对编号,相同则进入自定义控件的方法中执行颜色变更操作 { item.m_selectColor = Color.DodgerBlue; bool pstate = true; item.panel_Set(pstate); gvValue(item); } else //不同则还原未未选中状态的颜色 { item.m_unselectColor = Color.FromArgb(166, 209, 245); bool pstate = false; item.panel_Set(pstate); } } }//new实例的时候,开始订阅 #endregion
MainForm:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Saker_Albert_HomeTest
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public void SubEvent(Register eventSource)
{
eventSource.clickUerEvent += EventSource_clickUerEvent;
}
private void EventSource_clickUerEvent(object sender, Register.clickUerBaseNullEventArgs e)
{
label_show.Text = e.KeyToRaiseEvent;
flowLayoutPanel1.Controls.Add(label_show);
}
private void button_Register_Click(object sender, EventArgs e)
{
Register register = new Register();
SubEvent(register); //必须紧跟创建的实例后面,不然无效,当实例窗口关闭则无效
register.ShowDialog();
/* if(register.status)
{
TestReg testReg = new TestReg();
//label_show.Text = register.label;
//flowLayoutPanel1.Controls.Add(label_show);
testReg.labeltext = register.label;
testReg.test();
flowLayoutPanel1.Controls.Add(testReg);
}*/
}
}
}
字窗体:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Saker_Albert_HomeTest
{
public partial class Register : Form
{
public bool status = false;
public string label;
#region 自定义事件
/*定义事件参数类*/
public class clickUerBaseNullEventArgs : EventArgs
{
public readonly string KeyToRaiseEvent;
public clickUerBaseNullEventArgs(string keyToRaiseEvent)
{
KeyToRaiseEvent = keyToRaiseEvent;
}
}
/*定义委托声明*/
public delegate void clickUserBaseNullEventHandler(object sender, clickUerBaseNullEventArgs e);
//用event关键字声明事件对象
public event clickUserBaseNullEventHandler clickUerEvent;
//事件触发方法
protected virtual void onClickUserBaseNullEvent(clickUerBaseNullEventArgs e)
{
if (clickUerEvent != null)
{
clickUerEvent(this, e);
}
}
//引发事件
private void RaiseEvent(string keyToRaiseEvent)
{
clickUerBaseNullEventArgs e = new clickUerBaseNullEventArgs(keyToRaiseEvent);
onClickUserBaseNullEvent(e);
}
#endregion
public Register()
{
InitializeComponent();
}
private void button_OK_Click(object sender, EventArgs e)
{
status = true;
label = label_Reg.Text;
RaiseEvent(label);
this.Close();
}
}
}