在winforms中创建可点击的C#图像映射

在winforms中创建可点击的C#图像映射,c#,winforms,imagemap,C#,Winforms,Imagemap,我正试图开发一个基本的C#winforms应用程序,重点是一个可点击的图像地图。也就是说,图像中的某个部分是可点击的,并将打开一个新表单。例如,图像可以是棋盘,单击某个正方形将执行打开新窗体的操作 我希望这个概念是清楚的。我已经研究了S.O.的类似问题,但找不到可行的解决方案 干杯我的解决方案是在保存图像的任何控件上利用MouseUp事件。点击后,使用PointToClient()将e.Location(MouseUp提供MouseEventArgs)的位置解析到控件 一旦获得该点,您只需确定它

我正试图开发一个基本的C#winforms应用程序,重点是一个可点击的图像地图。也就是说,图像中的某个部分是可点击的,并将打开一个新表单。例如,图像可以是棋盘,单击某个正方形将执行打开新窗体的操作

我希望这个概念是清楚的。我已经研究了S.O.的类似问题,但找不到可行的解决方案


干杯

我的解决方案是在保存图像的任何控件上利用
MouseUp
事件。点击后,使用
PointToClient()
e.Location
(MouseUp提供
MouseEventArgs
)的位置解析到控件

一旦获得该
,您只需确定它是否位于有效的
矩形
中,如果是,则启动相应的表单

编辑:

您可以使用表单设计器向表单添加控件,例如
面板
,然后向该控件添加事件处理程序,例如
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
    }
}
每当用户单击面板并释放鼠标按钮时,就会调用该事件处理程序

在该事件处理程序中,可以有如下内容:

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


如果要考虑很多区域,比如保持一个列表或数组的代码<矩形> <代码>,并在它们上面循环,你可能需要一个更优雅的解决方案。

基本上你会处理图像上的点击事件并得到点击点的坐标。然后,你必须评估它的价值,你需要做什么或不做

或者,您可以使用“区域”

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

编辑:

codeproject上有一个图像映射控件项目,位于以下url:


尽管它是.NET 1.0,但根据您的需要调整它应该不是什么大问题。

您能更详细地解释一下吗?我想我理解你的意思,我更愿意使用这种方法。我有mouseMove事件中的picbox和x/y坐标。如果是要捕获的单击,请使用MouseUp或MouseDown。不要使用MouseMove…它会不断触发。没有MouseMove,我如何捕获X/Y坐标(位置范围)?这就是
MouseEventArgs
e.location
(已翻译为客户端坐标)列出的副本不是副本。这个答案甚至不能帮助别人解决这个问题。谢谢!乐于助人而不是轻蔑