2

我正在使用 newWebView2将文本插入 Edge 内的文本框中。我有以下事件:

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';");
}

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

4

1 回答 1

3

EventHandler<CoreWebView2NavigationCompletedEventArgs>委托具有 delaressender类型objecte类型参数的签名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")

如果您不使用该参数,您也可以使用丢弃运算符显式忽略它。

(_, 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}';");
}
于 2020-07-09T08:27:49.130 回答