Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/EmptyTag/158.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 捕获控件外的鼠标事件_C#_Winforms - Fatal编程技术网

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。好的,我几乎从头开始尝试,现在可以使用了,谢谢:)