1

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

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

4

2 回答 2

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 */
        }
    }
于 2008-11-14T18:20:23.660 回答
1

如果您首先在按钮处理程序中执行此操作会发生什么?(或者可能是按钮的子类并覆盖 OnClick 以“全球”应用此逻辑)。

Button b = (Button) sender;
b.Focus();

这样能解决问题吗?

于 2008-11-14T16:31:34.330 回答