Вызов события MouseClick у формы, при нажатии на дочерние Controls (Winforms)

Рейтинг: 0Ответов: 1Опубликовано: 27.02.2023

У меня есть форма, на ней некая кнопка.

Если я нажимаю на свободное место на форме, то у формы вызывается событие MouseClick. Но если я нажму на кнопку на форме, то у кнопки вызовется это событие, а у формы уже нет.

Как сделать так, чтобы при нажатии на кнопку, MouseClick вызывался и у формы?

Знаю, что в JavaScript можно настроить event rising, может можно в winforms?

Ответы

▲ 0Принят

Для этого нужно для родительского элемента установить свойство ControlStyles.ContainerControl в true

Ещё нужно переопределить метод ProcessCmdKey в форме и возвращать false, чтобы событие правильно обрабатывалось.

Пример:

public partial class MyForm : Form
{
    public MyForm()
    {
        InitializeComponent();
        this.SetStyle(ControlStyles.ContainerControl, true);
    }

    protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
    {
        return false;
    }

    private void MyForm_MouseClick(object sender, MouseEventArgs e)
    {
        MessageBox.Show("MouseClick on form!");
    }

    private void MyButton_MouseClick(object sender, MouseEventArgs e)
    {
        MessageBox.Show("MouseClick on button!");
    }
}