使用键盘快捷键控制丢失焦点事件

时间:2008-11-14 16:13:06

标签: .net events lostfocus

对于.NET Winforms和Windows Presentation Foundation,如果我有一个用户刚刚输入文本的文本框和一个按钮,如果用户单击该按钮,则会在按钮单击事件触发之前触发“LostFocus”事件。但是,如果用户使用按钮的键盘快捷键(例如,按钮的文本为“& Button”或“_Button”,用户执行Alt + B),则“LostFocus”事件在按钮单击事件后触发,这不太有用

你知道合理的解决方法吗?在ButtonClick之前,我们想要在LostFocus中发生各种各样的事情。

2 个答案:

答案 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();

这会解决这个问题吗?