尝试将参数传递给新的 EventHandler

Trying to pass a parameter to a new EventHandler

提问人:Jakxna360 提问时间:7/9/2020 最后编辑:thatguyJakxna360 更新时间:7/9/2020 访问量:714

问:

我正在使用新的将文本插入 Edge 中的文本框。我有以下活动:WebView2

webView.NavigationCompleted += new EventHandler<CoreWebView2NavigationCompletedEventArgs>(InputText);

它运行以下代码:

private async void InputText(object sender, CoreWebView2NavigationCompletedEventArgs args)
{
    await webView.ExecuteScriptAsync("document.getElementById('Textbox').value = 'Test';");
}

这适用于我正在玩的测试站点。但是,我想将脚本作为字符串变量传递到方法中。尝试将其添加到其中时,表示委托没有重载,例如:InputText

webView.NavigationCompleted += new EventHandler<CoreWebView2NavigationCompletedEventArgs>(e => InputText(this, e, "Test"));

private async void InputText(object sender, CoreWebView2NavigationCompletedEventArgs args, string test)
{
    await webView.ExecuteScriptAsync("document.getElementById('Textbox').value = 'Test';");
}

有没有办法重载它来添加参数?

C# WPF .net-core webview2

评论


答:

3赞 thatguy 7/9/2020 #1

委托具有 delareed 类型和类型参数的签名。EventHandler<CoreWebView2NavigationCompletedEventArgs>senderobjecteCoreWebView2NavigationCompletedEventArgs

public delegate void EventHandler<CoreWebView2NavigationCompletedEventArgs>(object sender, CoreWebView2NavigationCompletedEventArgs e);

但是,lambda 表达式只有一个参数。您需要添加第二个参数来匹配上面的委托签名。我们称之为 .e => InputText(this, e, "Test")esenders

(s, e) => InputText(this, e, "Test")

如果无论如何都不使用该参数,也可以使用 discard 运算符显式忽略它。

(_, e) => InputText(this, e, "Test")

此外,请确保在方法中使用了您的参数。在这里,我使用字符串插值 将 的值插入到脚本中。test$test

private async void InputText(object sender, CoreWebView2NavigationCompletedEventArgs args, string test)
{
    await webView.ExecuteScriptAsync($"document.getElementById('Textbox').value = '{test}';");
}