【问题标题】:Creating clickable C# image map in winforms在 winforms 中创建可点击的 C# 图像映射
【发布时间】:2014-01-22 15:09:07
【问题描述】:

我正在尝试开发一个基本的 C# winforms 应用程序,其重点是可点击的图像映射。也就是说,某个部分可单击并打开新表单的图像。比如图片可以是一个棋盘,点击某个方格会执行打开一个新表格的动作。

我希望这个概念很清楚。我在 S.O. 上看过类似的问题。并且找不到可行的解决方案。

干杯

【问题讨论】:

  • 列出的副本不是副本。这个答案甚至不能帮助某人解决这个问题。
  • 谢谢!有帮助而不是轻视

标签: c# winforms imagemap


【解决方案1】:

我的解决方案是利用MouseUp 事件控制任何持有图像的控件。当您获得该点击时,使用PointToClient()e.Location(MouseUp 为您提供MouseEventArgs)的位置解析到控件。

获得Point 后,您只需确定它是否在有效的Rectangle 中,如果是,则启动适当的表单。

编辑:

您可以使用表单设计器向表单添加控件,例如Panel,然后向该控件添加事件处理程序,例如OnMouseUp。它看起来像这样:

private void panel1_MouseUp(Object sender, MouseEventArgs e)
{
    //your code goes here
}

每当用户单击您的面板并释放鼠标按钮时,都会调用该事件处理程序。

在那个事件处理程序中,你可以有这样的东西:

if (e.Button.Equals(MouseButtons.Left))
{
    Rectangle rect = new Rectangle(10, 10, 100, 100);  //this is the zone you wish to react the user clicking on
    if (rect.Contains(e.Location))
    {
        //show your form
    }
}

e.Location 将是释放按钮时鼠标的位置,在与相关控件相对应的坐标中,在本例中为 panel1

如果要考虑许多区域,您可能需要更优雅的解决方案,例如保留Rectangle 的列表或数组并循环它们。

【讨论】:

  • 您能详细解释一下吗?我想我明白你的意思,并且更愿意使用这种方法。我有来自 mouseMove 事件的 picbox 和 x/y 坐标。
  • 如果您想捕捉点击,请使用 MouseUp 或 MouseDown。不要使用 MouseMove...它会不断触发。
  • 如何在没有 mouseMove 的情况下捕获 X / Y 坐标(位置范围)?
  • 这就是你在MouseEventArgs...e.Location 中得到的(已经翻译成客户坐标)
【解决方案2】:

基本上,您将处理图像上的点击事件并获取点击点的坐标。然后你必须将它评估为你需要做某事或不做某事的值。

您也可以使用“区域”。

已经有一个类似的问答可能是您正在寻找的内容:

Create clickable zones in image?

编辑:

codeproject上有一个image-map控制项目,网址如下:

http://www.codeproject.com/Articles/2820/C-Windows-Forms-ImageMap-Control

虽然它是 .NET 1.0,但根据您的需求调整它应该没什么大不了的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-17
    • 1970-01-01
    • 2011-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多