C# visual studio上一张图片中的多个可单击区域

C# visual studio上一张图片中的多个可单击区域,c#,picturebox,C#,Picturebox,可以从这张图片中制作9个按钮而不将它们分开吗。我尝试插入9个不同的图片框,但它们重叠。我也试着设置透明的背景和改变父母。有什么建议吗? 正如罗德里戈·席尔瓦(Rodrigo Silva)的评论所指出的,用一个图片盒制作的“图像地图”可能是最好的方法。将整个图像放在PictureBox中。注册单击事件处理程序。在处理程序内部,您可以使用MousePosition.X和MousePosition.Y获取鼠标坐标 要确定单击了哪个区域,我的方法是计算鼠标单击相对于图片中心的角度。然后测试单击落在8个扇

可以从这张图片中制作9个按钮而不将它们分开吗。我尝试插入9个不同的图片框,但它们重叠。我也试着设置透明的背景和改变父母。有什么建议吗?

正如罗德里戈·席尔瓦(Rodrigo Silva)的评论所指出的,用一个图片盒制作的“图像地图”可能是最好的方法。将整个图像放在PictureBox中。注册单击事件处理程序。在处理程序内部,您可以使用
MousePosition.X
MousePosition.Y
获取鼠标坐标

要确定单击了哪个区域,我的方法是计算鼠标单击相对于图片中心的角度。然后测试单击落在8个扇区中的哪个扇区(可能还需要进行“半径”检查,以确保单击不在中心区域或外部边缘之外)。基本上:

double cx; // set to center X coordinate of picture
double cy; // set to center Y coordinate of picture

double x = MousePosition.X;
double y = MousePosition.Y;

double angle = Math.Atan2(y - cy, x - cx);

// convert from radians to degrees
angle *= 180 / Math.PI;

double distance = Math.Sqrt((x - cx) * (x - cx) + (y - cy) * (y - cy));

if (distance > min_distance && distance <= max_distance)
{
    if (angle >= 0 && angle < 45) { /* ... */ }
    else if (angle < 90) { /* ... */ }
    // etc.
}
double cx;//设置为图片的中心X坐标
双cy;//设置为图片的中心Y坐标
双x=鼠标位置.x;
双y=鼠标位置。y;
双角度=数学Atan2(y-cy,x-cx);
//从弧度转换为度
角度*=180/Math.PI;
双距离=数学Sqrt((x-cx)*(x-cx)+(y-cy)*(y-cy));
如果(距离>最小距离和距离=0和角度<45){/*…*/}
如果(角度<90){/*…*/}
//等等。
}

当然,您可以使用任何其他方法根据鼠标坐标确定单击了哪个区域。

您可以创建一个保存该图像的pictureBox,在mouseClick事件中获取相对坐标并相应地执行相应的任务。您的图片看起来很美。