1. //子窗体
    2. #region 自定义事件
    3. /*定义事件参数类*/
    4. public class clickButtonEventArgs : EventArgs
    5. {
    6. public readonly string KeyToRaiseEvent;
    7. public clickButtonEventArgs(string keyToRaiseEvent)
    8. {
    9. KeyToRaiseEvent = keyToRaiseEvent;
    10. }
    11. }
    12. /*定义委托声明*/
    13. public delegate void clickButtonEventHandler(object sender, clickButtonEventArgs e);
    14. //用event关键字声明事件对象
    15. public event clickButtonEventHandler clickUerEvent;
    16. //事件触发方法
    17. protected virtual void onClickButtonEvent(clickButtonEventArgs e)
    18. {
    19. if (clickUerEvent != null)
    20. {
    21. clickUerEvent(this, e);
    22. }
    23. }
    24. //引发事件
    25. private void RaiseEvent(string keyToRaiseEvent)
    26. {
    27. clickButtonEventArgs e = new clickButtonEventArgs(keyToRaiseEvent);
    28. onClickButtonEvent(e);
    29. }
    30. #endregion
    31. // 主窗体:
    32. #region 订阅自定义控件被点击的自定义事件
    33. /// <summary>
    34. /// 订阅事件
    35. /// </summary>
    36. /// <param name="evenSoure"></param>
    37. public void Subscribe(UserBaseNullDeviceInfo evenSource)
    38. {
    39. evenSource.clickUerEvent += EvenSource_clickUerEvent;
    40. }
    41. /// <summary>
    42. /// 取消订阅事件
    43. /// </summary>
    44. /// <param name="evenSoure"></param>
    45. public void UnSubscribe(UserBaseNullDeviceInfo evenSource)
    46. {
    47. evenSource.clickUerEvent -= EvenSource_clickUerEvent;
    48. }
    49. /// <summary>
    50. /// 事件方法:自定义控件panel_in被点击 响应事件
    51. /// </summary>
    52. /// <param name="sender"></param>
    53. /// <param name="e"></param>
    54. private void EvenSource_clickUerEvent(object sender, UserBaseNullDeviceInfo.clickUerBaseNullEventArgs e)
    55. {
    56. string str = e.KeyToRaiseEvent; //获取当前点击的自定义控件的label_Number
    57. showControl();
    58. foreach (UserBaseNullDeviceInfo item in flowLayoutPanel_DeviceConfig.Controls)
    59. {
    60. if (item.m_strDevNumber == str) //遍历流控件中的与产生自定义事件的自定义用户控件比对编号,相同则进入自定义控件的方法中执行颜色变更操作
    61. {
    62. item.m_selectColor = Color.DodgerBlue;
    63. bool pstate = true;
    64. item.panel_Set(pstate);
    65. gvValue(item);
    66. }
    67. else //不同则还原未未选中状态的颜色
    68. {
    69. item.m_unselectColor = Color.FromArgb(166, 209, 245);
    70. bool pstate = false;
    71. item.panel_Set(pstate);
    72. }
    73. }
    74. }
    75. //new实例的时候,开始订阅
    76. #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();
    
            }
        }
    }