C#将EventHandler放入get语句中

C#将EventHandler放入get语句中,c#,winforms,events,C#,Winforms,Events,我试图在用户控件中放入事件处理程序,其中控件中控件的事件处理程序链接到此事件处理程序,如下所示: public EventHandler PicDoubleClick { get { return pictureBox1.DoubleClick; } set { pictureBox1.DoubleClick += value;

我试图在用户控件中放入事件处理程序,其中控件中控件的事件处理程序链接到此事件处理程序,如下所示:

    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语句工作了,尽管它工作得不正常。但是有没有办法返回事件处理程序?有更合适的方法吗?

事件应该有
添加
/
删除
访问器:

public event EventHandler PicDoubleClick
{
    add
    {
        pictureBox1.DoubleClick += value;
        label1.DoubleClick += value;
        label2.DoubleClick += value;
    }
    remove
    {
        pictureBox1.DoubleClick -= value;
        label1.DoubleClick -= value;
        label2.DoubleClick -= value;
    }
}
然而,截获事件可能是一个更好的主意,因为否则发送方将不会是调用方所期望的;i、 e

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);
}

事件应具有
添加
/
删除
访问器:

public event EventHandler PicDoubleClick
{
    add
    {
        pictureBox1.DoubleClick += value;
        label1.DoubleClick += value;
        label2.DoubleClick += value;
    }
    remove
    {
        pictureBox1.DoubleClick -= value;
        label1.DoubleClick -= value;
        label2.DoubleClick -= value;
    }
}
然而,截获事件可能是一个更好的主意,因为否则发送方将不会是调用方所期望的;i、 e

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);
}

我试试看。这可能解释了EventHandler不同寻常的语法。@JordanFerrazza请注意我添加的关于拦截更可取的部分谢谢。你能详细说明一下第二部分吗?我明白你的意思,但我不知道如何应用代码。例如,如果有“Invoke(this)”@JordanFerrazza它应该像写的那样工作,如果你有一个最新的C#编译器;如果你有一个较旧的编译器,你需要:
EventHandler tmp=SomeEvent;如果(tmp!=null)tmp.Invoke(this,EventArgs.Empty);
Nah,这很难理解。(我使用了第一部分。)我会试试的。这可能解释了EventHandler不寻常的语法。@JordanFerrazza请注意我添加的关于优先拦截的部分谢谢。你能详细介绍一下第二部分吗?我明白了,但我不知道如何应用代码。例如,如果有“Invoke(this)”,我该如何应用它?@JordanFerrazza如果你有一个最新的C#编译器,它应该像写的那样工作;如果你有一个较旧的编译器,你将需要:
EventHandler tmp=SomeEvent;如果(tmp!=null)tmp.Invoke(this,EventArgs.Empty);
不,这很难理解。(我使用了第一部分。)