用户控件中多控件自定义单击事件

问题描述

这个题目听上去有点绕,不知道该如何描述。如下图,根据需求自定义了一个用户控件(UserControl),除了用户控件本身外,上面还有一个标签控件(labelControl)和图片控件(pictureEdit)。

它们三者各自有一个单击事件(Click),现用户控件的单击Click事件只能在"非控件区"触发有效,显示我们需要在用户控件所有位置单击都触发单击事件。

解决方案

最容易想到的方法是让用户控件的上所有控件都去注册同一个单击事件,这是最简单的方法也是"笨"的方法。正确的方式是在用户控件自定义一个事件来实现。

首先,在用户控件内定义一个用户控件事件(ButtonClick),方便用户调用实现:

1
public event EventHandler ButtonClick;

再在用户控件的构造函数中实现三个事件,并绑定到同一事件中:

1
2
3
this.Click += BigButton_Click;
this.pictureEdit1.Click += BigButton_Click;
this.labelControl1.Click += BigButton_Click;

BigButton_Click中触发它的Click事件:

1
2
3
4
private void BigButton_Click(object sender, EventArgs e)
{
    ButtonClick?.Invoke(this, e);
}

最后用户在使用用户控件时,注册并实现用户控件的ButtonClick事件,用ButtonClick事件完成原来Click事件的任务即可。

 

posted @   我也是个傻瓜  阅读(355)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
历史上的今天:
2016-12-27 DevExpress使用的过期版本解决方法
2014-12-27 ArcGIS高程Z值的去除方法
点击右上角即可分享
微信分享提示