C# 关于窗体继承后,控件事件触发两次的问题解决办法

C# 专栏收录该内容
10 篇文章 0 订阅

有时多个窗体功能相同,控件繁多,重新布局费时费力,因此可以利用窗体继承来实现相似功能的窗体。但是在继承窗体后,我们会发现触发继承窗体上的控件时,被继承窗体的相应的控件也会被触发一次。这是因为继承窗体总是会执行被继承窗体的虚方法。
比如form2继承自form1,form1中有一个button,那么相应的form2中也会有一个button,如果我们仅是触发form2中button的click事件的话,form1的button的click也会被触发。
看下面这个例子

private void button1_Click(object sender, EventArgs e)
        {
            //这是form1中的click事件
            MessageBox.Show("这是form1");
        }
private void button1_Click(object sender, EventArgs e)
        {
            //这是form2中的click事件,该button继承自form1中的button
            MessageBox.Show("这是form2");
        }

如果我们点击form2的button的话,程序将会先显示 “这是form1” 对话框,然后再显示 “这是form2” 对话框。可以看到,被继承窗体相应事件也被触发了。
那么如何解决呢?其实很简单,只需要重写继承窗体的click事件即可。

form1中代码如下

//将按钮方法改为public virtual类型,以便继承的窗体能够重写button_Click事件
        public virtual void button1_Click(object sender, EventArgs e)
        {
              //这是form1中的click事件
            MessageBox.Show("这是form1");  
        }

form2中代码如下

//重写被继承按钮的button_Click事件,并在Form2.Designer.cs中注释掉被继承按钮的事件
        public override void button1_Click(object sender, EventArgs e)
        {
             //这是form2中的click事件
            MessageBox.Show("这是form2");
        }

在这里插入图片描述
注意一定要把Form2.Designer.cs中的click事件注释掉,否则将会执行两遍 “这是form2” 对话框。
此时点击form2中的button,将只会显示 “这是form2” 对话框了。成功解决!

  • 1
    点赞
  • 0
    评论
  • 2
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值