c# - C#将EventHandler放在get语句中
问题描述
我试图在用户控件中放入一个事件处理程序,其中控件中控件的事件处理程序链接到此事件处理程序,如下所示:
public EventHandler PicDoubleClick
{
get
{
return pictureBox1.DoubleClick;
}
set
{
pictureBox1.DoubleClick += value;
label1.DoubleClick += value;
label2.DoubleClick += value;
}
}
但我在第 5 行收到以下编译错误:
1>C:\Users\jorda\source\repos\Encyclo1\Encyclo1\Pic.cs(20,36,20,47): error CS0079: The event 'Control.DoubleClick' can only appear on the left hand side of += or -=
我希望该属性返回一个事件处理程序。有点像一个没有自己价值的财产,而是别人的财产。
我已经让 set 语句正常工作,尽管它工作异常。但是有没有办法返回事件处理程序?有没有更合适的方法来做到这一点?
解决方案
事件应该有add
/remove
访问者:
public event EventHandler PicDoubleClick
{
add
{
pictureBox1.DoubleClick += value;
label1.DoubleClick += value;
label2.DoubleClick += value;
}
remove
{
pictureBox1.DoubleClick -= value;
label1.DoubleClick -= value;
label2.DoubleClick -= value;
}
}
但是,拦截事件可能是一个更好的主意,因为否则发送者将不是调用者所期望的;IE
void SomeInitMethod() {
pictureBox1.DoubleClick += (s,a) => OnSomeEvent();
label1.DoubleClick += (s,a) => OnSomeEvent();
label2.DoubleClick += (s,a) => OnSomeEvent();
}
public event EventHandler SomeEvent;
protected virtual void OnSomeEvent() {
SomeEvent?.Invoke(this, EventArgs.Empty);
}
推荐阅读
- swift - 如何保持 UIButton 的图像颜色不会重置为默认值?
- spring-data-jpa - SpringJpa:如何获取具有唯一或第一个字段的对象列表
- python - 按 pandas 中的索引列表搜索
- java - 无法在 Java 中正确计算二维数组
- jquery - 像引导模式一样悬停导航栏时如何使网页变暗?
- sql - SQL - Select distinct based on specific columns
- rust - 是否有可能拥有一个引用其寿命可以更短的子结构的结构?
- c++ - How do I launch the HLSL debugger in Visual Studio 2017?
- angular - Angular - 如何将 ngFor 过滤到特定的对象属性数据
- sql - SQL 通过对同一列应用两个条件来选择列