对于.NET Winforms和Windows Presentation Foundation,如果我有一个用户刚刚输入文本的文本框和一个按钮,如果用户单击该按钮,则会在按钮单击事件触发之前触发“LostFocus”事件。但是,如果用户使用按钮的键盘快捷键(例如,按钮的文本为“& Button”或“_Button”,用户执行Alt + B),则“LostFocus”事件在按钮单击事件后触发,这不太有用
你知道合理的解决方法吗?在ButtonClick之前,我们想要在LostFocus中发生各种各样的事情。
答案 0 :(得分:3)
您可以尝试在触发按钮逻辑之前跟踪丢失的焦点逻辑是否已经发生。无论如何,你不应该直接在处理程序中拥有代码。你可以这样做:
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 :(得分:1)
如果您首先在按钮处理程序中执行此操作会发生什么? (或者可能是按钮的子类,并覆盖OnClick以在全球范围内应用此逻辑)。
Button b = (Button) sender;
b.Focus();
这会解决这个问题吗?