在几个类之间传递EventHandler

时间:2011-04-15 18:05:01

标签: c# winforms

我正在创建一个gui小部件一个dll库,一个派生自FORM的类(我考虑过usercontrol,但它没有内置属性,如Opacity和我需要的更多)。

因为我不想向这个控件的用户公开这个派生类将继承的所有标准方法和属性,所以我创建了一个nothe类“中间人”,它应该封装并只公开所需的这个DLL的用户的方法。
问题在于揭露事件。

这是一个抽象的例子:

 class Class1
    {
        Class2 theClass2;
        public Class1()
        {
            theClass2 = new Class2();
            theClass2. += new EventHandler(theClass3_EventHandler);
            theClass2.TriggerEvent();
        }

        void theClass3_EventHandler(object sender, EventArgs e)
        {
            throw new NotImplementedException();
        }

    }

    class Class2
    {
        Class3 theClass3;


        public Class2()
        {
            theClass3 = new Class3();

        }

        public void TriggerEvent()
        {
            theClass3.Trigger();
        }


        class Class3
        {
            public event EventHandler theEvent;

            public void Trigger()
            {
                if (this.theEvent != null)
                    theEvent(this, new EventArgs());
            }


        }
    }

2 个答案:

答案 0 :(得分:2)

public event EventHandler theEvent {
    add {
      SomeNestedClass.theEvent += value;
    }
    remove {
      SomeNestedClass.theEvent -= value;
    }
}

答案 1 :(得分:0)

首先,继承是一种关系。这意味着Form可以执行的所有子类都可以执行。由于您不是这种情况,因此不应该派生表格。

至于事件。你需要在“中间人”课程中重新定义它们。在该类中,只需从表单中订阅事件并在处理程序方法中触发它们。

public class MyCoolControl : Control
{
    private Form _customForm;

    public MyCoonControl()
    {
       _customForm.Clicked += (source, e) => Clicked(source,e);
    }

    public event EventHandler Clicked = delegate {};
}