尝试将参数传递给新的 EventHandler

Trying to pass a parameter to a new EventHandler

我正在使用新的 WebView2 将文本插入到 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';");
}

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

EventHandler<CoreWebView2NavigationCompletedEventArgs> 委托具有声明 object 类型的参数 senderCoreWebView2NavigationCompletedEventArgs 类型的 e 的签名。

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