управлять событием потери фокуса при использовании сочетания клавиш

StackOverflow https://stackoverflow.com/questions/290590

  •  08-07-2019
  •  | 
  •  

Вопрос

Как для .NET Winforms, так и для Windows Presentation Foundation, если у меня есть текстовое поле, в которое пользователь только что ввел текст, и кнопку, если пользователь нажимает кнопку «LostFocus»; событие срабатывает до срабатывания события нажатия кнопки. Однако если пользователь использует сочетание клавиш для кнопки (например, текст кнопки «& amp; Кнопка» или «_Button», а пользователь нажимает Alt + B), тогда «LostFocus»; событие срабатывает после события нажатия кнопки, что менее полезно.

Знаете ли вы о разумных обходных путях? У нас есть разные вещи, которые мы хотим реализовать в LostFocus до ButtonClick.

Это было полезно?

Решение

Вы можете попробовать отследить, произошла ли логика потери фокуса перед срабатыванием логики кнопки. В любом случае вы не должны иметь код непосредственно в обработчике. Вы можете сделать что-то вроде этого:

public partial class Form1 : Form
    {
        private Boolean _didLostFocusLogic;

        public Form1()
        {
            InitializeComponent();
        }

        private void textBox1_Leave(object sender, EventArgs e)
        {
            LostFocusLogic();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            ButtonClickLogic();
        }

        private void LostFocusLogic()
        {
            /* Do stuff */
            _didLostFocusLogic = true;
        }

        private void ButtonClickLogic()
        {
            if (!_didLostFocusLogic)
                LostFocusLogic();

            _didLostFocusLogic = false; // Reset for next time.

            /* Do stuff */
        }
    }

Другие советы

Что бы произошло, если бы вы сделали это в первую очередь в обработчике кнопок? (или, возможно, создайте подкласс для кнопки и переопределите OnClick, чтобы применить эту логику "по всему миру").

Button b = (Button) sender;
b.Focus();

Это обойдет проблему?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top