鼠标单击标签内未检测到的PictureBox上的位置

时间:2012-08-26 22:31:59

标签: c# location label mouseevent

我有一个只包含两件事的表单,一个 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的点击位置(图像中的橙色框)向下偏移到标签的右侧。

Form With Label

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

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

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

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

谢谢,

1 个答案:

答案 0 :(得分:1)

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

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

Point p = e.Location;
p.X += pictureBox1.Left;
p.Y += pictureBox1.Top;
if(label1.Bounds.Contains(p))
   .....