对于.NET Winforms和Windows Presentation Foundation,如果我有一个用户刚刚输入文本的文本框和一个按钮,如果用户单击按钮,则“LostFocus”事件在按钮单击事件之前触发。但是,如果用户使用按钮的键盘快捷方式(例如,按钮的文本为“&按钮”或“_按钮”,用户执行Alt+B),则“LostFocus”事件在按钮单击事件之后触发,这就不太有用了。
你知道合理的解决方法吗?我们希望在按钮单击之前发生各种事件,例如失去焦点。
对于.NET Winforms和Windows Presentation Foundation,如果我有一个用户刚刚输入文本的文本框和一个按钮,如果用户单击按钮,则“LostFocus”事件在按钮单击事件之前触发。但是,如果用户使用按钮的键盘快捷方式(例如,按钮的文本为“&按钮”或“_按钮”,用户执行Alt+B),则“LostFocus”事件在按钮单击事件之后触发,这就不太有用了。
你知道合理的解决方法吗?我们希望在按钮单击之前发生各种事件,例如失去焦点。
你可以尝试跟踪失去焦点逻辑是否发生,然后再触发按钮逻辑。反正最好不要在处理程序中直接编写代码。你可以这样做:
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();
那会解决问题吗?