2011-04-22 59 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