仅通过 TAB 在 Winforms TextBox 中捕获 OnEnter()

Capturing OnEnter() in Winforms TextBox specifically via TAB only

我想在控件被 TAB 键时捕获。

我认为当控件不是通过鼠标单击输入时可能更容易处理。我希望 OnMouseDown() 发生在 OnEnter() 之前,这样我就可以设置一个标志,但事实并非如此。我想我可以在 OnEnter() 中检查鼠标按钮的状态,但这似乎有点乱七八糟。

我认为我不关心以编程方式设置焦点时会发生什么。我猜是默认值。

有什么想法吗?

好吧,这样做很尴尬,但您可以在技术上监视 Windows 生成的输入事件,然后再发送它们。您是否在主窗体中实现了 IMessageFilter 接口并查看消息编号。例如:

public partial class Form1 : Form, IMessageFilter {
    public Form1() {
        InitializeComponent();
        Application.AddMessageFilter(this);
        this.FormClosed += delegate { Application.RemoveMessageFilter(this); };
    }

    public enum InputEvent { Unknown, Keyboard, Mouse };
    public static InputEvent LastInputEvent { get; private set; }

    bool IMessageFilter.PreFilterMessage(ref Message m) {
        if (m.Msg >= 0x100 && m.Msg <= 0x109) LastInputEvent = InputEvent.Keyboard;
        if (m.Msg >= 0x200 && m.Msg <= 0x20A) LastInputEvent = InputEvent.Mouse;
        return false;
    }
}

示例用法:

    private void textBox2_Enter(object sender, EventArgs e) {
        textBox2.BackColor = LastInputEvent == InputEvent.Mouse ? Color.AliceBlue : Color.Yellow;
    }

我想不出明显的故障模式,可能有一个。顺便说一句,奇怪的请求。