C # Попробуйте запустить событие для вызова функции - PullRequest
0 голосов
/ 07 июня 2019

Когда я нажимаю клавишу ввода, которая активирует функцию buttonEditClient_PressEnter, должна вызываться функция buttonEditClient_ButtonClick.

private void buttonEditClient_PressEnter(object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.Enter)
        {
            //fire buttonEditClient_ButtonClick function
        }
    }

private async void buttonEditClient_ButtonClick(object sender, ButtonPressedEventArgs e)
    {
        //buttonEditClient_ButtonClick activated
    }

В конструкторе:

this.buttonEditClient.ButtonClick += new DevExpress.XtraEditors.Controls.ButtonPressedEventHandler(this.buttonEditClient_ButtonClick);
this.buttonEditClient.KeyDown += new System.Windows.Forms.KeyEventHandler(this.buttonEditClient_PressEnter);

Если я попробую это:

private void buttonEditClient_PressEnter(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Enter)
    {
        buttonEditClient_ButtonClick(sender, e)
    }
}

Я получаю эту ошибку:

 cannot convert from 'System.Windows.Forms.KeyEventArgs' to 'DevExpress.XtraEditors.Controls.ButtonPressedEventArgs'    

Как мне активировать функцию buttonEditClient_ButtonClick?

Ответы [ 2 ]

2 голосов
/ 07 июня 2019

Событие щелчка по своей природе отличается от события клавиатуры (например, одно включает информацию о нажатой кнопке мыши и положении курсора, другое - о нажатой клавише), поэтому вы не можете передать KeyEventArgs обработчику щелчка, который ожидает ButtonPressedEventArgs.

У вас есть несколько простых вариантов здесь:

  • Переместите ваш код из обработчика нажатия кнопки в дополнительную функцию и вызовите ее из обоих вашихобработчики.
  • Найдите способ создания нового экземпляра ButtonPressedEventArgs внутри обработчика ключа, а затем передайте его вместо KeyEventArgs.Это было бы очень сложным решением, так как вы буквально придумываете (какую позицию курсора вы собираетесь задать?).

Первое решение может выглядеть примерно так:

private void buttonEditClient_PressEnter(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Enter)
    {
        buttonEditClientSubmit();
    }
}

private async void buttonEditClient_ButtonClick(object sender, ButtonPressedEventArgs e)
{
    buttonEditClientSubmit();
}

private void buttonEditClientSubmit()
{
    // your code...
}
0 голосов
/ 07 июня 2019

Это зависит от того, действительно ли вам нужно что-то из ButtonPressedEventArgs.Если вам не нужно ничего из ButtonPressedEventArgs, вы можете просто вызвать оба события на одну функцию.

private void Handle_buttonEditClient()
{
   // Do what you want to do when the button is pressed or has the "Enter" 
   // key pressed on it.
}

private void buttonEditClient_PressEnter(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Enter)
    {
        Handle_buttonEditClient();
    }
}

private void buttonEditClient_ButtonClick(object sender, ButtonPressedEventArgs e)
{
    Handle_buttonEditClient();
}

Примечание

Я сделал buttonEditClick_ButtonClick синхронным, но если вы оставите его асинхронным, применимо то же самое.Просто пусть оба события вызывают одну и ту же функцию.

Если вам нужен ButtonPressedEventArgs, то это, как говорит Анас Алвейш.Вам нужно будет создать экземпляр ButtonPressedEventArgs.Я не знаком с DevExpress, поэтому я не знаю, как вы это сделаете.Может быть что-то вроде new ButtonPressedEventArgs(buttonEditClient)?;

Документы DevExpress на ButtonPressedEventArgs

...