C#委托与事件的使用

1 篇文章 0 订阅
1 篇文章 0 订阅

功能要求:

有两个窗口类,分别是StartUpWnd类以及Form1类,需要在StartUpWnd界面中点击“”运行“按钮”进入Form1界面,同时需要在Form1界面上点击“主界面”按钮重新调出“主界面”。

解决方案:

第一个功能非常基本,因为程序运行时出现的就是“主界面”,对其中的“运行”按钮响应的事件中加入调出Form1的代码即可,不再赘述。重点是功能2,如何在子界面中调出父窗口呢?要是在Qt中用信号槽的方式也很简单,但由于初学C#,所以我前期采用的是比较笨的方法,具体实现方案是:在父窗口中建一个一直在线的定时器,当子窗口中点击了“主界面”按钮后将其一个成员变量置位,父窗口中的定时器一直在判断该成员变量的值,若需要显示,则显示主界面。

这个方法可以实现功能但是...非常不科学。

在学习了C#中委托事件之后,我意识到这可以用事件的方式完成。

①在子窗口Form1中声明事件:

        /// <summary>
        /// 创建事件收到打开主界面的委托
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        public delegate void OnRecievedHandler(object sender, EventArgs e);

        /// <summary>
        /// 点击“主界面”按钮将引发此事件
        /// </summary>
        public event OnRecievedHandler ToShowMainPage;

②在子窗口Form1中发出事件:

        private void UI_B_MAINPAGE_Click(object sender, EventArgs e)
        {           
            ToShowMainPage(this, e);
        }

③在父窗口类StartUpWnd中将事件与响应函数连起来:

        public StartUpWnd()
        {
            InitializeComponent();
            ///将事件与响应函数连接起来:
            form1.ToShowMainPage += new Form1.OnRecievedHandler(my_OnRecieved);
        }


        /// <summary>
        /// 事件响应函数
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void my_OnRecieved(object sender, EventArgs e)
        {
            if (this.IsHandleCreated)
            {
               
                this.BringToFront();
            }
        }

至此功能已经完成。

  • 0
    点赞
  • 0
    收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Nunyunnini

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值