Winforms 如何在C+中处理事件+/CLI

Winforms 如何在C+中处理事件+/CLI,winforms,c++-cli,Winforms,C++ Cli,有人能帮我修好我的功能吗?我正在尝试创建一个事件处理程序,但我不知道我的代码出了什么问题,所以这里是: private: System::Void progressBar(System::Object^ sender, System::EventArgs^ e System::Windows::Forms::WebBrowserProgressChangedEventArgs) Handles WebBrowser->ProgressChanged { // code he

有人能帮我修好我的功能吗?我正在尝试创建一个事件处理程序,但我不知道我的代码出了什么问题,所以这里是:

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

我希望有人能帮助我,因为我已经在网上和一些论坛上看过了,但我没有找到任何运气,也找不到一个好的代码示例。

您当前的事件处理程序函数定义有两个问题:

  • 用于声明第二个参数的语法无效。你有这个:

    EventArgs^ e WebBrowserProgressChangedEventArgs
    
    e
    参数被声明为类型
    EventArgs^
    ,然后您在其后面添加了一个随机的其他类型(
    WebBrowserProgressChangedEventArgs
    )。这将导致编译器错误,因为编译器不知道如何处理它,因为它不属于那里

    如果希望
    e
    的类型为
    WebBrowserProgressChangedEventArgs
    ,则需要将其移到开头并删除
    EventArgs

    请记住,
    WebBrowserProgressChangedEventArgs
    EventArgs
    的一个子类(您可以看出,因为它以相同的名称结尾,这是WinForms中的一种常见命名约定),因此
    EventArgs
    拥有并可以做的一切,以及
    WebBrowserProgressChangedEventArgs
    可以做的一切。编译器已经知道这一点,所以您不需要告诉它

    参数
    e
    的正确声明如下:

    WebBrowserProgressChangedEventArgs^ e
    
  • 据我所知,
    Handles
    关键字(添加在事件处理程序方法的定义之后)仅存在于VB.NET中。因此,以下内容无效:

    Handles WebBrowser->ProgressChanged
    
    在其他语言(如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);
    

    问题是你没有任何代码。@siride看起来好像有代码。我在问题中看到了一些。问题是,它无法编译。