управлять событием потери фокуса при использовании сочетания клавиш - PullRequest
1 голос
/ 14 ноября 2008

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

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

Ответы [ 2 ]

3 голосов
/ 14 ноября 2008

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

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 */
        }
    }
1 голос
/ 14 ноября 2008

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

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

Это обойдет вопрос?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...