HI有人可以建议如何解决这个错误吗? 我得到了这个帖子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;
}
}
}
在我的表单中删除用户界面
private void adminController_DeleteClick(object sender, AdminControllerEventArgs e)
{
Repository.Delete(user);
}
答案 0 :(得分:1)
事件Click
期望处理程序实现System.EventHandler
描述的签名。这不起作用 - 您必须更改签名或为Click
实现自己的附加处理程序,这会引发另一个调用自定义处理程序的事件。我不太确定你在这里尝试将事件处理程序代码与其他UI消息混合等。
答案 1 :(得分:1)
这里的问题是方法的签名。按钮单击事件没有要传递的事件数据,按照惯例,它们有两个参数。
由于没有要传递的事件数据,因此使用 EventArgs ,因此您已经实现了按钮单击并不知道该错误
答案 2 :(得分:0)
Button.Click将使用普通EventArgs
参数引发Click事件。您不能指望Click(object sender, EventArgs e)
使用更具体的方法签名(使用AdminControllerEventArgs
参数)。如何将EventArgs转换为AdminControllerEventArgs?
想象一下它的工作原理。会发生什么:
new EventArgs()
btnDelete_Click(this, args)
args
应为AdminControllerEventArgs
EventArgs
btnDelete_Click
中的代码尝试访问args.Success
属性EventArgs
没有不幸的是,你需要一个解决方法。