提问人:Jakxna360 提问时间:7/9/2020 最后编辑:thatguyJakxna360 更新时间:7/9/2020 访问量:714
尝试将参数传递给新的 EventHandler
Trying to pass a parameter to a new EventHandler
问:
我正在使用新的将文本插入 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';");
}
有没有办法重载它来添加参数?
答:
3赞
thatguy
7/9/2020
#1
委托具有 delareed 类型和类型参数的签名。EventHandler<CoreWebView2NavigationCompletedEventArgs>
sender
object
e
CoreWebView2NavigationCompletedEventArgs
public delegate void EventHandler<CoreWebView2NavigationCompletedEventArgs>(object sender, CoreWebView2NavigationCompletedEventArgs e);
但是,lambda 表达式只有一个参数。您需要添加第二个参数来匹配上面的委托签名。我们称之为 .e => InputText(this, e, "Test")
e
sender
s
(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}';");
}
评论