Событие щелчка левой кнопкой мыши для всего приложения C #

#c# #winforms

#c# #winforms

Вопрос:

Я хочу воспроизводить звук при нажатии левой кнопки мыши в любом месте моей формы без необходимости размещать события щелчка мышью для каждого отдельного элемента управления в форме. Есть ли способ добиться этого?

Комментарии:

1. Рассмотрите возможность использования WPF вместо WinForms. События WPF автоматически передаются родительским элементам управления, так что это было бы тривиально.

Ответ №1:

Вы можете обнаружить уведомление Windows до того, как оно будет отправлено элементу управления с фокусом, с помощью интерфейса IMessageFilter. Сделайте его похожим на это:

 public partial class Form1 : Form, IMessageFilter {
    public Form1() {
        InitializeComponent();
        Application.AddMessageFilter(this);
        this.FormClosed  = delegate { Application.RemoveMessageFilter(this); };
    }

    public bool PreFilterMessage(ref Message m) {
        // Trap WM_LBUTTONDOWN
        if (m.Msg == 0x201) {
            System.Diagnostics.Debug.WriteLine("BEEP!");
        }
        return false;
    }
}
 

Это работает для любой формы в вашем проекте, а не только для основной.

Комментарии:

1. Потрясающе! Спасибо! О, и значение для левой кнопки мыши для меня было m.Msg == 0x0201

Ответ №2:

Это должно сработать

 const int WM_PARENTNOTIFY = 0x210;
const int WM_LBUTTONDOWN = 0x201;

protected override void WndProc(ref Message m)
{
    if (m.Msg == WM_LBUTTONDOWN || (m.Msg == WM_PARENTNOTIFY amp;amp; (int)m.WParam == WM_LBUTTONDOWN)) 
         DoIt();
    base.WndProc(ref m);
}
 

Комментарии:

1. Потрясающие компоненты. Я искал это целую вечность ооочень просто. Приветствую, чувак.

Ответ №3:

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

Комментарии:

1. Иногда полезно глобально подключать мышь или клавиатуру… но никогда не подключайте глобально то, что вы можете обрабатывать локально.

Ответ №4:

Регистр WM_PARENTNOTIFY Выберите регистр Wparam Регистр 513 ‘ WM_LBUTTODOWN PlaySoundA End Выберите

Использование для Vb или Vba