如何取消设置以下事件处理程序?

时间:2012-01-31 14:19:14

标签: c# winforms event-handling

我已经将事件处理程序设置为这样的事件:

 frm.FormClosed += (sender,  args) =>
                    {
                        if (this.myGrid.Enabled)
                        {
                            this.myGrid.Select();
                        }
                    };
 frm.Show();

我希望在表单关闭后挂出eventhandler。

你能帮助我吗?

2 个答案:

答案 0 :(得分:4)

  

我希望在表单关闭后挂出eventhandler。

我假设您要删除它。

  1. 没必要,不要在上面浪费时间。关闭表单(和Disposed)时,也会收集事件处理程序。它是同一表单的成员,后面是代码中的this一词。

  2. 如果您仍想删除它,则需要一份副本:

     FormClosedEventhandler closeHandler;  // class member
    
    
    
     closeHandler = (sender,  args) =>  
          {
             if (this.myGrid.Enabled)
             {
                this.myGrid.Select();
             }
          };
    
     frm.FormClosed += closeHandler ; // OnLoad
     ...
    
     frm.FormClosed -= closeHandler ; // OnClose
    

答案 1 :(得分:4)

如果您的意思是如何从事件中删除事件处理程序,那么您将无法使用匿名委托,但您可以创建具有相同参数和相同代码的方法,然后:

private void EventHandler(object sender, FormClosedEventArgs e)
{
     if (this.myGrid.Enabled)
     {
        this.myGrid.Select();
     }
}

frm.FormClosed += EventHandler; // Attach the event handler
frm.FormClosed -= EventHandler; // Remove the event handler