将委托或事件属性添加到此类?

Tru*_*an1 3 .net c# asp.net events delegates

我创建了一个控件,其他开发人员可以创建一个实例并使用.控件中有一个按钮单击.如何允许开发人员在我的控件的某个部分插入自己的代码?我不确定在这种情况下是否或如何使用委托或事件.以下示例中有人可以提供帮助:

public class MyControl : CompositeControl
{
   ...
   void btnSubmit_Click(object sender, EventArgs e)
   {
      //DO SOMETHING
      if (success)
      {
         //CALL DEVELOPER'S LOGIC
      }
   }
}
Run Code Online (Sandbox Code Playgroud)

在开发人员代码中,当按钮单击控件成功时,他们如何传递逻辑?

protected override void CreateChildControls()
{
    var ctlMyControl = new MyControl();

    //ADD SuccessCode() TO ctlMyControl
    //SO IT IS TRIGGERED ON SUCCESS
    //MAYBE SOMETHING LIKE:
    //ctlMyControl.SuccessEvent = SuccessCode()??

    this.Control.Add(ctlMyControl);
}

protected void SuccessCode()
{
    //DO SOMETHING
}
Run Code Online (Sandbox Code Playgroud)

如何更新MyControl以允许此操作?

SLa*_*aks 5

您需要向控件添加一个事件,如下所示:

void btnSubmit_Click(object sender, EventArgs e) {
    //DO SOMETHING
    if (success) {
        OnSomethingCompleted();
    }
}

///<summary>Occurs when the operation is successfully completed.</summary>
public event EventHandler SomethingCompleted;
///<summary>Raises the SomethingCompleted event.</summary>
internal protected virtual void OnSomethingCompleted() { OnSomethingCompleted(EventArgs.Empty); }
///<summary>Raises the SomethingCompleted event.</summary>
///<param name="e">An EventArgs object that provides the event data.</param>
internal protected virtual void OnSomethingCompleted(EventArgs e) {
    if (SomethingCompleted != null)
        SomethingCompleted(this, e);
}
Run Code Online (Sandbox Code Playgroud)

在表单中,您可以为事件添加处理程序,如下所示:

myControl.SomethingCompleted += myControl_SomethingCompleted;

void myControl_SomethingCompleted(object sender, EventArgs e) {
    //Do things
}
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参阅文档.