-1

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

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

我希望有人可以帮助我,因为我已经查看了网络和一些论坛,但是我没有运气,也找不到我的代码的好例子。

4

1 回答 1

0

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

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

    EventArgs^ e WebBrowserProgressChangedEventArgs
    

    e参数被声明为 type EventArgs^,然后在它之后添加了一个随机的其他类型 ( WebBrowserProgressChangedEventArgs)。这将导致编译器错误,因为编译器不知道该怎么做,因为它不属于那里。

    如果您想e成为类型WebBrowserProgressChangedEventArgs,则需要将其移至开头并删除EventArgs

    请记住,它WebBrowserProgressChangedEventArgs是 的子类EventArgs(您可以知道它是因为它以相同的名称结尾,这是 WinForms 中的通用命名约定),所以一切EventArgs都有并且可以做,所以WebBrowserProgressChangedEventArgs. 编译器已经知道这一点,所以你不需要告诉它。

    那么,参数的正确声明e是这样的:

    WebBrowserProgressChangedEventArgs^ e
    
  2. 据我所知,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);
于 2013-04-03T03:13:05.503 回答