Как различать события мыши для поля редактирования элементов управления NumericUpDown и кнопок со стрелками - PullRequest
1 голос
/ 16 июня 2020

В элементе управления NumericUpDown есть два элемента управления. Один - это кнопки «вверх-вниз», а второй - это поле редактирования. Нулевое положение коллекции NumericUpDown его элементов управления - это кнопки «вверх-вниз». Позиция 1 - это поле редактирования.

У меня есть элемент управления numericupdown в моей форме с включенными событиями MouseUp и MouseDown. События срабатывают, * Когда я нажимаю на поле редактирования * Когда я нажимаю кнопки со стрелками вверх / вниз

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

Спасибо.

Ответы [ 2 ]

2 голосов
/ 16 июня 2020

Решение состоит в том, чтобы создать новый элемент управления (MyNumericUpDown) и переопределить методы UpButton / DownButton. Вы можете запускать пользовательские события из этих методов. Затем в своем коде вы можете прикрепить к этим настраиваемым событиям

public class MyNumericUpDown : NumericUpDown
{
    public event EventHandler UpDownClick;
    public event EventHandler UpClick;
    public event EventHandler DownClick;

    public override void UpButton()
    {
        base.UpButton();
        UpDownClick?.Invoke(this, EventArgs.Empty);
        UpClick?.Invoke(this, EventArgs.Empty);
    }
    public override void DownButton()
    {
        base.DownButton();
        UpDownClick?.Invoke(this, EventArgs.Empty);
        DownClick?.Invoke(this, EventArgs.Empty);
    }
}
0 голосов
/ 16 июня 2020

У меня работает следующее.

private void TestNumericUpDown_Click(object sender, EventArgs e)
{
    MouseEventArgs me = (MouseEventArgs)e;
    if (me.X <= TestNumericUpDown.Controls[1].Width + 1)
        Console.WriteLine("EditBox");
    else if (me.Y <= TestNumericUpDown.Controls[1].Height / 2)
        Console.WriteLine("UpArrow");
    else
        Console.WriteLine("DownArrow");
}
...