управлять событием потери фокуса при использовании сочетания клавиш
Вопрос
Как для .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();
Это обойдет проблему?