C#WinForms-检测鼠标指针移动到窗体或窗口左下角的事件

C#WinForms-检测鼠标指针移动到窗体或窗口左下角的事件,c#,winforms,C#,Winforms,默认情况下,textbox控件的visible属性设置为false。当用户将鼠标指针移动到窗口/窗体的左下角时,文本框应显示出来。当鼠标从左下角移开时,它应再次变为不可见 我所尝试的: private void Form1_MouseMove(object sender, MouseEventArgs e) { if (Bounds.Contains(10, 100) && !coolTextBox.Visible) {

默认情况下,textbox控件的visible属性设置为false。当用户将鼠标指针移动到窗口/窗体的左下角时,文本框应显示出来。当鼠标从左下角移开时,它应再次变为不可见

我所尝试的:

    private void Form1_MouseMove(object sender, MouseEventArgs e)
    {
        if (Bounds.Contains(10, 100) && !coolTextBox.Visible)
        {
            coolTextBox.Visible = true;
        }
        else
        {
            coolTextBox.Visible = false;
        }
    }

我认为检查鼠标指针是否在左下角的if语句条件不正确。另外,这有点棘手,因为表单/窗口的大小可以由用户调整,所以我也必须考虑到这一点。文本框本身也位于左下角。

侧注;这很可能是一个相当糟糕的UI想法,原因与人类的用户体验心理有关(阅读神秘肉食导航——一个隐藏交互方式的UI在默认情况下设计得很糟糕),同时也让触摸用户难以操作

表单的0,0位于左上角,因此需要使用ClientSize属性,该属性返回控件所在的边框内表单区域的大小。我们这样做是为了在表单高度可能改变的情况下,评估鼠标指针是否靠近窗口底部

鼠标移动事件将具有X和Y坐标-要使用这些坐标确定鼠标是否位于左下角的10x10区域中,请执行以下操作:

private void Form1_MouseMove(object sender, MouseEventArgs e)
{
  coolTextBox.Visible = (e.X < 10 && e.Y > this.ClientSize.Height -10);
}
private void Form1\u MouseMove(对象发送方,MouseEventArgs e)
{
coolTextBox.Visible=(e.X<10和&e.Y>this.ClientSize.Height-10);
}

我建议使用客户端大小,因为我认为Mousemove事件不会触发标题栏。如果我错了,而他们错了,并且当指针触到客户端区域的最顶行(标题栏下)时,e.Y包含eg 20,请使用
这个。高度
(我在手机上,无法测试)

您可以使用文本框本身的大小来确定左下角。这在不同的缩放选项下对我有效。另外,请确保已连接MouseMove事件。在这里,我在构造函数中执行此操作,但您也可以通过设计器执行此操作:

public Form1()
{
    InitializeComponent();
    this.MouseMove += Form1_MouseMove;
}

private void Form1_MouseMove(object sender, MouseEventArgs e)
{
    coolTextBox.Visible = coolTextBox.ClientRectangle.Contains(coolTextBox.PointToClient(Cursor.Position));       
}

这只是我桌面电脑上的一个个人项目。那个代码对我不起作用。你能写完整的代码吗?这样我就知道我做得对了。这行代码是mousemove事件处理程序中唯一一行编辑的代码。如果仍然存在问题,请在代码行上放置断点,运行应用程序,然后非常小心地从窗口外将指针引入表单左下角(不要用鼠标触摸窗口,否则调试器将中断,您将检查值,它们将出错,您将继续,它将再次中断..并进入一个难以中断的循环)仍然不工作。该窗口使用FormBorderStyle=FormBorderStyle没有边框。无;@e如果发布的代码正在工作,但值设置得太低,请尝试将其设置为coolTextBox.Visible=(e.X<100&&e.Y>this.ClientSize.Height-100);是的,我不确定什么是合理的“左下角”-通过将10更改为不同的值,您可以自由地对给定的像素进行实验,该值与您对“左下角”的点击框大小的偏好相匹配被认为是因为您没有很好地描述您的设置,或者您没有正确地实施建议。您说表单是无边界的,但用户可以调整表单大小…因此您必须有允许此操作的代码。这些内容可能相互冲突。显示更多代码…您是对的。我创建了一个新的pr但在我最初的项目中,它不起作用。可能是因为我有一些相互冲突的怪癖。