2013-04-03 101 views
-1

有人可以幫我修復我的功能嗎?我試圖讓一個事件處理程序,但我不知道什麼是錯我的代碼,所以這裏是:如何在C++/CLI中處理事件

private: System::Void progressBar(System::Object^ sender, System::EventArgs^ e System::Windows::Forms::WebBrowserProgressChangedEventArgs) Handles WebBrowser->ProgressChanged 
{ 
    // code here.... 
} 

我希望有人能幫助我,因爲我已經在看網頁和一些論壇,但我無法獲得任何好運,但我無法找到我的代碼的一個好例子。

+0

有什麼不對?沒有任何代碼。 – siride

+0

@siride \t看起來他有代碼。我在問題中看到一些。問題是,它不會編譯。 –

回答

0

有兩個問題與您當前的事件處理函數的定義:

  1. 你用聲明第二個參數是無效的語法。你有這樣的:

    EventArgs^ e WebBrowserProgressChangedEventArgs 
    

    e參數被聲明爲EventArgs^類型,那麼你之後(WebBrowserProgressChangedEventArgs)添加一個隨機的其他類型。這會導致編譯器錯誤,因爲編譯器不知道如何編譯它,因爲它不屬於那裏。

    如果您想要eWebBrowserProgressChangedEventArgs類型,則需要將其移至開頭並刪除EventArgs

    記住WebBrowserProgressChangedEventArgsEventArgs子類(你可以告訴,因爲它具有相同的名稱,在的WinForms一個共同的命名約定結束),所以一切EventArgs有,可以做,這樣可以WebBrowserProgressChangedEventArgs。編譯器已經知道這一點,所以你不需要告訴它。

    說法e的正確申報,那麼,是這樣的:

    WebBrowserProgressChangedEventArgs^ e 
    
  2. 據我所知,Handles關鍵字(事件處理程序方法的定義後加入)只存在在VB 。淨。因此,以下內容無效:在其他語言(如C++/CLI和C#)中,您需要通過代碼手動連接事件處理程序。這看起來是這樣的:

    obj->Event += gcnew EventHandler(this, Obj_Event); 
    



所以,把他們放在一起,對於事件處理方法正確的簽名是:

Void progressBar(Object^ sender, WebBrowserProgressChangedEventArgs^ e) 
{ 
    // code goes here... 
} 

而且別的地方,你需要線將此事件處理程序方法添加到事件中,如下所示:

WebBrowser->ProgressChanged += gcnew WebBrowserProgressChangedEventArgs(this, progressBar);