English 中文(简体)
使用键盘快捷键时控制失去焦点事件
原标题:
  • 时间:2008-11-14 16:13:06
  •  标签:

对于.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();

那会解决问题吗?





相关问题
热门标签