Попытка передать параметр новому обработчику событий - PullRequest
2 голосов
/ 09 июля 2020

Я использую новый 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';");
}

Есть ли способ перегрузить это, чтобы добавить параметр?

1 Ответ

3 голосов
/ 09 июля 2020

Делегат EventHandler<CoreWebView2NavigationCompletedEventArgs> имеет подпись, которая удаляет параметр sender типа object и e типа CoreWebView2NavigationCompletedEventArgs.

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

Однако лямбда-выражение 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}';");
}
...