仅通过 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;
}
我想不出明显的故障模式,可能有一个。顺便说一句,奇怪的请求。
我想在控件被 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;
}
我想不出明显的故障模式,可能有一个。顺便说一句,奇怪的请求。