Как получить событие мыши правой кнопкой мыши? Изменение EventArgs на MouseEventArgs вызывает ошибку в Form1Designer?

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

 private void pictureBox1_Click(object sender, EventArgs e)
 {
 MessageBox.Show("Left click");
 }

Я хочу иметь щелчок правой кнопкой мыши, щелкнув правой кнопкой мыши на том же объекте.

Я читал онлайн, что вы можете использовать этот переключатель:

 private void pictureBox1_Click(object sender, EventArgs e)
 {
 if (e.Button == System.Windows.Forms.MouseButtons.Right){MessageBox.Show("Right click");}
 if (e.Button == System.Windows.Forms.MouseButtons.Left){MessageBox.Show("Left click");}
 }

Проблема в том, что когда я это делаю, у button есть красная строка и ошибка:

 "'System.EventArgs' does not contain a definition for 'Button'... "

Поэтому я исправляю это, изменяя "EventArgs e" на "MouseEventArgs e"

Но тогда в Form1Designer появляется новая ошибка, где строка события:

 this.pictureBox1.Click += new System.EventHandler(this.pictureBox1_Click);

Ошибка говорит:

"No overload for 'pictureBox1_Click' matches delegate 'System.EventHandler' "

Как это исправить? Спасибо за чтение

Ответ 1

Вы должны ввести литье внутри обработчика события click

MouseEventArgs me = (MouseEventArgs) e;

Ответ 2

Вам нужен MouseClick вместо Click обработчик событий, ссылка.

switch (e.Button) {

    case MouseButtons.Left:
    // Left click
    break;

    case MouseButtons.Right:
    // Right click
    break;
    ...
}

Ответ 3

Для меня не работало событие MouseClick или Click, потому что события просто не вызываются при щелчке правой кнопкой мыши. Быстрый способ сделать это:

 private void button1_MouseUp(object sender, MouseEventArgs e)
 {
        if (e.Button == MouseButtons.Right)
        {
            //do something here
        }
        else//left or middle click
        {
            //do something here
        }
 }

Вы можете изменить это, чтобы делать то, что вы хотите, от значений аргументов.

ПРЕДУПРЕЖДЕНИЕ: Существует один улов с использованием только мыши. если вы mousedown на элементе управления, а затем вы перемещаете курсор из элемента управления, чтобы освободить его, вы все равно получите событие. Чтобы этого избежать, вы также должны убедиться, что мышь вверх происходит внутри элемента управления в обработчике событий. Проверка правильности координат курсора мыши в прямоугольнике управления до того, как вы проверите кнопки, сделает это правильно.

Ответ 4

Использовать событие MouseClick вместо Click