Обработка нажатия клавиш в C# и WindowsForms на примере синтезатора

Обработка нажатия клавиш в C# и WindowsForms на примере синтезатора

Обработка нажатия клавиш в C# и WindowsForms на примере синтезатора

В одной из предыдущих статей мы рассмотрели как создать простейший
синтезатор на WindowsForms. На данный момент нажатие по клавишам
синтезатора возможно при помощи клика мыши.
В сегодняшней статье мы рассмотрим как использовать для этой
цели ввод с клавиатуры в C# и WindowsForms.

Наша цель- это использование клавиш клавиатуры для нажатия по кнопкам
синтезатора, а также отображение состояния нажатой клавиши.

Ниже приведен полный код.





using System.Media;





namespace WinFormsApp_Piano

{

    public partial class Form1 : Form

    {





        private SoundPlayer _soundPlayer;





        public Form1()

        {

            InitializeComponent();



            // Включаем предварительное прослушивание клавиш формы

            KeyPreview = true;

        }





        # метод для обработки ввода клавиатуры

        private void MainForm_KeyDown(object sender, KeyEventArgs e)

        {

            Button buttonToClick = null;



            switch (e.KeyCode)

            {

                case Keys.Q:

                    buttonToClick = button1;

                    break;

                case Keys.W:

                    buttonToClick = button2;

                    break;

                case Keys.E:

                    buttonToClick = button3;

                    break;

                case Keys.A:

                    buttonToClick = button4;

                    break;

                case Keys.S:

                    buttonToClick = button5;

                    break;

                case Keys.D:

                    buttonToClick = button6;

                    break;

                case Keys.Z:

                    buttonToClick = button7;

                    break;

                case Keys.X:

                    buttonToClick = button8;

                    break;



                }



                 if (buttonToClick != null)

                 {

                    HighlightButton(buttonToClick);

                    buttonToClick.PerformClick();

                    }



            }



         # метод для изменения состояния клавиши

          private void HighlightButton(Button button)

        {

            // Временно меняем цвет фона кнопки

            button.BackColor = SystemColors.GrayText;



            // Создаем обработчики событий GotFocus и LostFocus для кнопки

            button.GotFocus += Button_GotFocus;

            button.LostFocus += Button_LostFocus;



            // Принудительно вызываем событие GotFocus для кнопки

            button.Focus();

        }



        # метод отслеживающий активность клавиши

        private void Button_GotFocus(object sender, EventArgs e)

        {

            // Восстанавливаем исходный цвет фона кнопки при фокусировке

            Button button = (Button)sender;

            button.BackColor = SystemColors.Control;

        }





        private void Button_LostFocus(object sender, EventArgs e)

        {

            // Восстанавливаем исходный цвет фона кнопки при потере фокуса

            Button button = (Button)sender;

            button.BackColor = SystemColors.Control;

            button.GotFocus -= Button_GotFocus;

            button.LostFocus -= Button_LostFocus;

        }





        private void PlaySound(string soundFilePath)

        {

            _soundPlayer = new SoundPlayer(soundFilePath);

            _soundPlayer.Play();

        }





        private void button1_Click_1(object sender, EventArgs e)

        {



            PlaySound(Полный путь к файлу\zvuk-notyi-do.wav");

        }



        private void button2_Click(object sender, EventArgs e)

        {

            PlaySound("Полный путь к файлу\zvuk-notyi-sol.wav");

        }



        private void button3_Click(object sender, EventArgs e)

        {

            PlaySound("Полный путь к файлу\zvuk-notyi-lya.wav");

        }



        private void button4_Click(object sender, EventArgs e)

        {

            PlaySound("Полный путь к файлу\zvuk-notyi-mi.wav");

        }



        private void button5_Click(object sender, EventArgs e)

        {

            PlaySound("Полный путь к файлу\zvuk-notyi-si.wav");

        }



        private void button6_Click(object sender, EventArgs e)

        {

            PlaySound("Полный путь к файлу\zvuk-notyi-re.wav");

        }



        private void button7_Click(object sender, EventArgs e)

        {

            PlaySound("Полный путь к файлу\zvuk-notyi-fa.wav");

        }



        private void button8_Click(object sender, EventArgs e)

        {

            PlaySound("Полный путь к файлу\zvuk-notyi-do-vo-vtoro-oktave.wav");

        }

    }



}



Таким образом, при нажатии по кнопкам клавиатуры будут воспроизведены звуки
ноты, а также изменится внешний вид клавиши синтезатора.

Источник

НЕТ КОММЕНТАРИЕВ

Оставить комментарий