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

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

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


person Community    schedule 14.11.2008    source источник


Ответы (2)


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

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 */
        }
    }
person Jason Down    schedule 14.11.2008

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

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

Обойдёт ли это проблему?

person Quibblesome    schedule 14.11.2008