//子窗体
#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();
}
}
}