Как обнаружить MouseDown на любом элементе управления не TextBox? - PullRequest
0 голосов
/ 25 августа 2011

TextBoxes и NumericUpDowns имеют странное свойство, не позволяющее отменять их выбор после выбора.Когда мой пользователь выбирает NumericUpDown и нажимает в другом месте в форме, NumericUpDown должен быть отменен.

К сожалению, это не так.В настоящее время я просто обрабатываю событие MouseDown всех других элементов управления в форме (например, панелей и самой формы) и просто вызываю метод Focus со случайной меткой, чтобы удалить фокус из NumericUpDown.Однако это нельзя применять к элементам меню или полосам прокрутки.

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

Спасибо за чтение.

Редактировать: проблема все еще не решена.

Ответы [ 2 ]

1 голос
/ 25 августа 2011

Обычно панель управления не является фокусируемой. Поэтому нажатие на панель НЕ удалит фокус из TextBox или NumericUpDown Countrol.

Обойти это можно, поместив кнопку на панель и отодвинув ее от вида, например, установив ее x = -100 и y = -100. НЕ устанавливайте visible = false.

Теперь всякий раз, когда пользователь нажимает на Panel (событие Panel_Click), устанавливаем фокус (Button.Focus ()) для этой кнопки. Таким образом, панель будет прокручиваться через колесо прокрутки.

0 голосов
/ 25 августа 2011

Заключите числовое поле в какую-нибудь панель и затем выполните

panel1.MouseHover += new EventHandler(panel1_MouseHover);

private void panel1_MouseHover(object sender, EventArgs e)
        {
            if (numericUpDown1.Focused)
            {
                panel1.Focus();
            }
        }

Я проверил это, и оно работает.!

...