C# 捕获控件外的鼠标事件
我想我的文本框关闭自己时,我点击其他地方,我如何才能做到这一点 我见过C# 捕获控件外的鼠标事件,c#,winforms,C#,Winforms,我想我的文本框关闭自己时,我点击其他地方,我如何才能做到这一点 我见过Control.Capture,它似乎能抓取鼠标事件,但不起作用 我还尝试了Control.Leave和Control.LostFocus事件,但只有当我按tab键或单击另一个文本字段时才会触发这些事件 关闭的意思是将其从其父对象中移除,但我认为这里重要的是事件处理消息并检查textbox是否包含焦点但未捕获,如果是,则隐藏它 protected override void WndProc(ref Message m) {
Control.Capture
,它似乎能抓取鼠标事件,但不起作用
我还尝试了Control.Leave
和Control.LostFocus
事件,但只有当我按tab键或单击另一个文本字段时才会触发这些事件
关闭的意思是将其从其父对象中移除,但我认为这里重要的是事件处理消息并检查textbox是否包含焦点但未捕获,如果是,则隐藏它
protected override void WndProc(ref Message m)
{
base.WndProc(ref m);
const int WM_CAPTURECHANGED = 0x0215;
if (m.Msg == WM_CAPTURECHANGED)
{
if (!textBox1.Capture && textBox1.Focused && textBox1.Visible)
{
textBox1.Visible = false;
}
}
}
关闭文本框是什么意思?你是说藏起来?@SriramSakthivel我也不明白。你不能关闭文本框。实际上,我的按钮上有一个事件,当我单击它时,我会创建一个文本框来重命名它,然后我想在单击时关闭此框。添加一个处理程序以在窗体上移动鼠标,然后当鼠标移到窗体上时,你可以隐藏文本框。您应该考虑如果用户在键盘上完成所有操作会发生什么,因此您可能应该订阅文本框上的“失去焦点”too@BryanPeeters再说一遍,你所说的关闭是什么意思?是的,你需要把它放在文本框所在的表单中。不起作用是没有帮助的。请告诉我发生了什么?我在发帖前试过了,结果成功了。您将焦点保持在文本框中,然后单击文本框将自动隐藏的位置。文本框在单击外部之前不会隐藏您是否先单击文本框?如果不这样做,看看。如果仍然不起作用,请将更新后的代码张贴到使用此代码的位置,以便我可以看到您的错误所在。我的代码与您相同,我将其设置为可见,并尝试将捕获设置为true和false,但条件始终不为true。好的,我几乎从头开始尝试,现在可以使用了,谢谢:)