0

我有一个仅包含 2 个东西的 Form ,一个PictureBox和一个Label

我在图片框中添加了一个鼠标单击事件处理程序。

this.pictureBox1.MouseClick += picture_MouseClick;

在处理程序内部,我需要检查鼠标单击的位置是否在标签的范围内。为此,我使用鼠标事件位置并检查该位置是否在标签范围内。

private void picture_MouseClick(object sender, MouseEventArgs e)
{
    if (label1.Bounds.Contains(e.Location))
    {
        MessageBox.Show("FOUND YOU!");
    }
}

我希望这会起作用,因为它看起来很容易,但是导致显示 MessageBox 的单击位置(图像中的橙色框)向下偏移并位于标签的右侧。

带标签的表格

这是因为鼠标事件是相对于 PictureBox 而标签边界是相对于 Form 的吗?或相反亦然?

顺便说一句,您在图像中看到的标签在运行时是隐藏的。我只是将标签用作了解用户是否单击某个位置的“黑客”方式。

public Form1()
{
    InitializeComponent();
    this.label1.Visible = false;
    this.pictureBox1.MouseClick += picture_MouseClick;
}

(我尝试从 eX 中减去标签的宽度,从 eY 中减去标签的高度,但这似乎不起作用。)

谢谢,

4

1 回答 1

1

e.Location是相对于图片框左上角的鼠标位置(一个点)。
Bounds属性相对于控件的容器。
(在这种情况下,容器就是形式,正如您和 Slack 正确指出的那样)

要检查正确的位置,我将尝试使用此代码(现已测试)

Point p = e.Location;
p.X += pictureBox1.Left;
p.Y += pictureBox1.Top;
if(label1.Bounds.Contains(p))
   .....
于 2012-08-26T22:46:30.993 回答