【问题标题】:Mouse Click Location On A PictureBox Not Detected Within Label在标签中未检测到图片框上的鼠标单击位置
【发布时间】:2012-08-26 22:31:59
【问题描述】:

我有一个只包含两个东西的表单,一个 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;
}

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

谢谢,

一月

【问题讨论】:

  • 如果点击标签,PictureBox 的 Click 事件不会触发。
  • 啊,诀窍就在这里!我实际上在运行时隐藏了标签。我只是使用标签的边界来知道鼠标点击的位置。我在这里真正追求的是类似于 HTML 图像映射的东西,我正在使用隐藏标签的位置来检查鼠标单击的位置。

标签: c# location label mouseevent


【解决方案1】:

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

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

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

【讨论】:

  • 好吧,我正在使用 Visual Studio,我只是将一个图片框拖动到我的表单,然后拖动一个标签到图片框的顶部。我怀疑 PictureBox 可以包含标签,因此它的父级可能是 Form。
  • @Steve:不; PictureBox 不是容器。
猜你喜欢
  • 2015-04-04
  • 1970-01-01
  • 2016-04-22
  • 1970-01-01
  • 2022-08-18
  • 1970-01-01
  • 2021-10-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多