2011-04-22 41 views
0

我可以有谁建议如何解决这个错误?
我收到了此线程的回复here,但不幸的是没有作者的回复。所以我决定在这里再次发布他的解决方案。我的用户控制错误

错误:错误1无法隐式转换类型 'project1.Utility.AdminController.AdminControllerEvent' 到 'System.EventHandler'

错误发生时,我想钩

//btnDelete.Click += new AdminControllerEvent(btnDelete_Click);

namespace project1.Utility 
{ 
    public partial class AdminController : UserControl 
    { 
     public delegate void AdminControllerEvent(object sender, AdminControllerEventArgs e); 

    public event AdminControllerEvent SaveClick; 
    public event AdminControllerEvent DeleteClick; 

    public AdminController() 
    { 
     InitializeComponent(); 
     //btnDelete.Click += new AdminControllerEvent(btnDelete_Click); 
    } 

    private void btnDelete_Click(object sender, AdminControllerEventArgs e) 
    { 
     if (DeleteClick != null) 
     { 
      if (MessageBox.Show(CoreMessages.DeleteAsk, CoreMessages.DeleteAsk, MessageBoxButtons.OKCancel) == DialogResult.OK) 
      { 
       DeleteClick(sender, e); 

       if (AdminControllerEventArgs.Success) 
       { 
        MessageBox.Show(CoreMessages.DeleteSuccess, CoreMessages.Successful, MessageBoxButtons.OK, MessageBoxIcon.Information); 
       } 
       else 
       { 
        MessageBox.Show(CoreMessages.DeleteFailed, CoreMessages.Failed, MessageBoxButtons.OK, MessageBoxIcon.Exclamation); 
       } 
      } 
     } 
    } 
} 

public class AdminControllerEventArgs : EventArgs 
{ 
    public static bool Success; 

    public AdminControllerEventArgs() 
     : base() 
    { 
     Success = true; 
    } 
} 

}


在我的表删除UI

private void adminController_DeleteClick(object sender, AdminControllerEventArgs e) 
    { 
     Repository.Delete(user); 
    } 
+0

是什么错误说? – V4Vendetta 2011-04-22 08:49:48

+0

我添加了错误:) – VeecoTech 2011-04-22 08:53:41

+0

点击已经是一个事件与按钮有一个不同的签名比你定义的,所以它将无法映射它 – V4Vendetta 2011-04-22 08:56:06

回答

1

事件Click预计落实System.EventHandler说明的签名的处理程序。这是行不通的 - 你必须改变签名或者实现你自己的Click的附加处理程序,这会引发另一个调用你的自定义处理程序的事件。我不太确定你在做什么,在这里混合事件处理程序代码与其他UI消息等。

+0

我得到了这个线程的回应http://stackoverflow.com/questions/5429841/simplify-crud-button/5431378#comment- 6585267但不幸的是没有作者的更多回应。所以我决定在这里再次发布他的解决方案。你可以看看他的代码吗? – VeecoTech 2011-04-22 09:28:57

+0

链接的例子总是使用'EventHandler'来签名,这将起作用 - 你的问题是试图使用一个自定义的。 – Mario 2011-04-22 09:31:01

+0

我认为他没有使用EventHandler。查看'public event AdminControllerEvent DeleteClick'这行''所以当涉及到'DeleteClick(sender,e)'这行时,DeleteClick(,)将需要(object sender,AdminControllerEventArgs e) – VeecoTech 2011-04-22 12:33:01

0

Button.Click将提高Click事件与纯EventArgs参数。您不能指望Click(object sender, EventArgs e)使用更具体的方法签名(使用AdminControllerEventArgs参数)。你如何将EventArgs转换为AdminControllerEventArgs?

想象一下,它的工作。会发生什么情况:

  • Button.Click创建new EventArgs()
  • Button.Click调用你btnDelete_Click(this, args)
  • args预计将AdminControllerEventArgs
  • 型的......但实际上EventArgs
  • btnDelete_Click中的代码尝试访问args.Success属性
  • ...这是不存在的,因为EventArgs没有一个

不幸的是,你需要一个解决方法。

1

这里的问题是该方法的签名。按钮点击事件没有事件数据可以传递,按照惯例它们有两个参数。

,因为它没有事件数据通过它使用EventArgs的,所以既然你们已经做出了执行按钮点击没有意识到这一点,并因此错误

+0

嗨你的问题有帮助吗? – V4Vendetta 2011-05-05 07:48:26