我有一个只包含两件事的表单,一个 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而Label边界是相对于Form吗?反之亦然?
顺便说一句,您在图像中看到的标签在运行时被隐藏。我只是使用标签作为“黑客”方式来了解用户是否点击了某个位置。
public Form1()
{
InitializeComponent();
this.label1.Visible = false;
this.pictureBox1.MouseClick += picture_MouseClick;
}
(我尝试从e.X中减去标签的宽度,从e.Y中减去标签的高度,但这似乎不起作用。)
谢谢,
扬
答案 0 :(得分:1)
e.Location
是相对于图片框左上角的鼠标位置(一个点)。
Bounds
属性相对于控件的容器
(在这种情况下,容器就是形式,就像你和SLacks正确指出的那样)
要检查正确的位置,我将尝试使用此代码(现已测试)
Point p = e.Location;
p.X += pictureBox1.Left;
p.Y += pictureBox1.Top;
if(label1.Bounds.Contains(p))
.....