题
对于.NET Winforms和Windows Presentation Foundation,如果我有一个用户刚刚输入文本的文本框和一个按钮,如果用户单击该按钮,则<!>“LostFocus <!>”;事件在按钮单击事件触发之前触发。但是,如果用户使用按钮的键盘快捷键(例如,按钮的文本是<!>“; <!> amp;按钮<!>”或<!>“; _Button <!>”;用户执行Alt + B ),然后<!>“LostFocus <!>”;按钮单击事件后触发事件,这不太有用。
你知道合理的解决方法吗?在ButtonClick之前,我们想要在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以应用此逻辑<!> quot; worldwide <!> quot;)。
Button b = (Button) sender;
b.Focus();
这会解决这个问题吗?
不隶属于 StackOverflow