2012-08-26 145 views
0

我有一个包含只有两件事情形式,一个图片框标签鼠标点击位置上的PictureBox未检测到在标签

我添加了一个鼠标点击事件处理程序的图片框。

this.pictureBox1.MouseClick += picture_MouseClick; 

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

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

我预计这个工作,因为它似乎很容易。然而,导致所显示的消息框点击位置(图像中的橙色框)被向下偏移,并以标签的右侧。

Form With Label

这是因为鼠标事件是相对于图片框和标签范围是相对于表?或相反亦然?

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

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

(我试过减去EX中标签的宽度和EY标签的高度,但似乎并没有工作。)

谢谢

+0

如果你尝试点击标签,PictureBox的Click事件不会触发。 – SLaks

+0

啊,但这是诀窍!我实际上在运行时隐藏了标签。我只是使用标签的边界来知道鼠标点击的位置。在这之后,我真的很喜欢HTML图像地图,我正在使用隐藏标签的位置来检查鼠标点击的位置。 –

回答

1

e.Location是相对于图片框左上角的鼠标位置(点)。
Bounds属性相对于控件的容器。
(在这种情况下,容器的形式,为你和休闲裤已经正确地指出)

要检查正确的位置上,我会用这个代码(现在的测试)

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

那么,我正在使用Visual Studio,我只是_Dragged_一个PictureBox到我的窗体然后_dragged_标签顶部的PictureBox。我怀疑一个PictureBox可以包含一个标签,因此它的父母可能是Form。 –

+0

@Steve:No; 'PictureBox'不是一个容器。 – SLaks