7

我必须实施一个解决方案,因为我不太了解这种语言(C#),所以我不确定如何进行。

让我解释一下:目标是让用户从一个项目中选择一个区域(它有一个圆形)。所以这个想法是在区域上放一个带有数字的图像(所以最后它看起来像一个时钟),并从用户点击的数字中获取区域。

所以我的问题是:是否可以在图像中创建可点击区域?(或者,如果您对此功能有其他解决方案,我很开放)

提前致谢 !

编辑 >> 这是一个 WinForm 应用程序,而不是一个网站。

4

4 回答 4

2

你为什么不直接实现这样的东西?

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Windows.Forms;

public class Zone
{
    public Region Region { get; private set; }
    public Action<MouseEventArgs> Click { get; private set; }

    public Zone(Region zoneRegion, Action<MouseEventArgs> click)
    {
        this.Region = zoneRegion;
        this.Click = click;
    }
}

public class PictureBoxWithClickableZones : PictureBox
{
    private readonly List<Zone> zones = new List<Zone>();

    public void AddZone(Zone zone)
    {
        if (zone == null)
            throw new ArgumentNullException("zone");

        this.zones.Add(zone);
    }

    protected override void OnMouseClick(MouseEventArgs e)
    {
        base.OnMouseClick(e);

        foreach (var zone in this.zones.Where(zone => zone.Region.IsVisible(e.Location)))
            zone.Click(e);
    }
}

如果您有足够的时间,您甚至可以在 Visual Studio 的 WinForms 设计器中制作并使用适当的组件。

于 2012-04-18T18:08:04.910 回答
2

谢谢大家的回答,里面有有趣的东西。

不幸的是,由于我必须非常快速地开发这个,我刚刚创建了一个图像,我将在该图像上捕获 onclick 事件,然后使用 Cursor.Position 捕获用户单击的区域,如下所示:

int X = pictureBox.PointToClient(Cursor.Position).X;
int Y = pictureBox.PointToClient(Cursor.Position).Y;

也许不是“更清洁”的方式,但它有效!不管怎么说,还是要谢谢你 !

于 2012-04-30T13:02:46.010 回答
1

尽管它不再那么流行,但您可以使用<map>标签来执行此操作。

<img src="planets.gif" width="145" height="126" alt="Planets" usemap="#planetmap" />

<map name="planetmap">
  <area shape="rect" coords="0,0,82,126" href="sun.htm" alt="Sun" />
  <area shape="circle" coords="90,58,3" href="mercur.htm" alt="Mercury" />
  <area shape="circle" coords="124,58,8" href="venus.htm" alt="Venus" />
</map> 

编辑:

由于这需要 WinForms 解决方案,也许本文可以帮助您。

C# Windows 窗体 ImageMap 控件

于 2012-04-17T15:20:07.760 回答
0

研究 Html 图像映射。

将花费您大约 5 分钟的时间来学习如何使用 is。

在标签中,您可以应用和映射属性,而不是定义您的地图区域和链接

这是一个快速的谷歌响应 http://www.javascriptkit.com/howto/imagemap.shtml

于 2012-04-17T15:19:05.183 回答