C# события. Событие при зажатой кнопке

336
20 февраля 2017, 12:17

Нужно что бы выполнялся некоторой метод при зажатой(не нажатой, а именно зажатой) кнопке "A". А когда я ее отпускаю вызывался другой метод.

Есть вот такой код. Но почему то мелодия проигрывается всего 1 секунду, а потом останавливатся.

 private void Window_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.Key == Key.A)
            {
                PlaySound();
                this.MyBotton.Background = Brushes.Black;
            }                
        }
        private void PlaySound()
        {
            wpalyer.URL = @"D:123.mp3";
            wpalyer.controls.play();
        }
        private void Window_KeyUp(object sender, KeyEventArgs e)
        {
            if (e.Key == Key.A)
            {
                wpalyer.controls.stop();
                this.MyBotton.Background = Brushes.White;
            }
        }
Answer 1

Я бы посоветовал такой путь:

private void Window_KeyDown(object sender, KeyEventArgs e)
{
    if (e.Key == Key.A &&
        !e.IsRepeat) // проверка на повторение
    {
        PlaySound();
        this.MyBotton.Background = Brushes.Black;
    }           
}
Answer 2

Добавил булевскую переменную repeat для проверки. Так как раньше событие при зажатой "A" начинала зацикливаться.

WindowsMediaPlayer wpalyer = new WindowsMediaPlayer();
bool repeat = true;
    private void Window_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.Key == Key.A && repeat== true)
        {
            PlaySound();
            this.MyBotton.Background = Brushes.Black;
            Debug.WriteLine("что-то");
            repeat = false;
        }           
    }
    private void PlaySound()
    {
        wpalyer.URL = @"D:\123.mp3";
        wpalyer.controls.play();
    }
    private void Window_KeyUp(object sender, KeyEventArgs e)
    {
        if (e.Key == Key.A)
        {
            wpalyer.controls.stop();
            this.MyBotton.Background = Brushes.White;
            Debug.WriteLine("что-то из KeyUp");
            repeat = true;
        }
    }
READ ALSO
Привести формулу в “красивый” вид c#

Привести формулу в “красивый” вид c#

есть допустим уравнение 2x^2+3x+6=0 или lim_n->10 (x) нужно отобразить это "красиво" чтоб без ^, а 2 была сверху и тп

289
Перевести SQL в LINQ

Перевести SQL в LINQ

Есть таблица Users, есть таблица RolesМежду ними таблица UserRoles, в которой связываются ID обеих сущностей

270
HtmlAgilityPack не удается получить переменные поля

HtmlAgilityPack не удается получить переменные поля

Код с сайта выглядит вот так:

305