2012-04-17 16 views
7

Tengo que implementar una solución para la cual no estoy muy seguro de cómo proceder ya que no conozco muy bien este lenguaje (C#).Crear zonas clicables en la imagen?

Déjame explicarte: El objetivo es tener algo que permita al usuario elegir una zona de un elemento (que tiene una forma circular). Así que la idea fue poner una imagen con números en la zona (por lo que al final parecería un reloj), y obtener la zona del número que el usuario haría clic.

Entonces mi pregunta es: ¿es posible crear zonas clicables en una imagen? (O si usted tiene otra solución para este functionnality, soy de mente abierta)

¡Gracias de antemano!

EDITAR >> Esto es para una aplicación WinForm, no un sitio web.

+3

¿Es este un sitio web o una aplicación de WinForms? – user7116

+0

Es para una aplicación winforms, de hecho me olvidé de mencionar que – BPruvost

Respuesta

2

Gracias a todos por sus respuestas, hay cosas interesantes en ellos.

Por desgracia, ya que tenía que desarrollar esta muy rápido, que acaba de crear una imagen en la que me gustaría coger el evento onclick y luego coger las zonas que el usuario hace clic en el uso de Cursor.Position así:

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

Tal vez no sea la manera "más limpia" de hacerlo, ¡pero funciona! ¡Gracias de todos modos!

0

Buscando en Html imagemaps.

le tomará unos 5 minutos para aprender a usar.

En la etiqueta se puede aplicar y mapa de atributos Que definir sus regiones de mapa y enlaces

Aquí hay una rápida respuesta de Google http://www.javascriptkit.com/howto/imagemap.shtml

+0

Igual que el anterior, olvidé mencionar que estoy construyendo una aplicación winforms, no un sitio web, por lo que no se puede utilizar: s – BPruvost

1

A pesar de que no es tan populares más, you can use the <map> tag para hacer esto .

<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> 

Editar:

ya que esto requiere una solución WinForms, tal vez este artículo puede ayudarle.

C# Windows Forms ImageMap Control

+0

Gracias por la ayuda. Lamentablemente estoy compilando una aplicación WinForms, no un sitio web (como se me olvidó mencionar en la primera publicación) – BPruvost

+0

He actualizado mi respuesta. – mgnoonan

2

¿Por qué no acaba de implementar algo como esto?

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); 
    } 
} 

Si tiene suficiente tiempo puede hacer los componentes apropiados y usar incluso en el Diseñador de WinForms de Visual Studio.