有人可以帮我修复我的功能吗?我正在尝试创建一个事件处理程序,但我不知道我的代码有什么问题,所以这里是:
private: System::Void progressBar(System::Object^ sender, System::EventArgs^ e System::Windows::Forms::WebBrowserProgressChangedEventArgs) Handles WebBrowser->ProgressChanged
{
// code here....
}
我希望有人可以帮助我,因为我已经浏览过网络和一些论坛,但我没有运气,我找不到一个很好的代码示例。
答案 0 :(得分:0)
您当前的事件处理函数定义存在两个问题:
用于声明第二个参数的语法无效。你有这个:
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);