C# 在picturebox c中添加可点击框#

C# 在picturebox c中添加可点击框#,c#,picturebox,rectangles,regions,C#,Picturebox,Rectangles,Regions,所以我有一个图片框,我需要画矩形或声明区域,或者,这样用户可以点击图片的某个区域,然后它做一些事情。我对此进行了一次又一次的研究,得出的结论是,我要么需要矩形作为目标,要么需要一个区域。我真的不希望在地图上有一个可见的项目,如果这可以简化它的话,我只希望有一个地方供用户点击并执行操作 最重要的是,地图将发生变化,当它发生变化时,我需要将方框更改为其他位置。下面是我想到的,它不起作用。我也对其他方式持开放态度 public Rectangle Location1; public R

所以我有一个图片框,我需要画矩形或声明区域,或者,这样用户可以点击图片的某个区域,然后它做一些事情。我对此进行了一次又一次的研究,得出的结论是,我要么需要矩形作为目标,要么需要一个区域。我真的不希望在地图上有一个可见的项目,如果这可以简化它的话,我只希望有一个地方供用户点击并执行操作

最重要的是,地图将发生变化,当它发生变化时,我需要将方框更改为其他位置。下面是我想到的,它不起作用。我也对其他方式持开放态度

    public Rectangle Location1;
    public Rectangle Location2;

    public String CharacterLocation == "WorldMap";

private void GenerateRegions ()
    {
        Pen blankPen = new Pen(Color.Transparent, 3);

        if (CharacterLocation == "WorldMap")
        {
            Rectangle[] rects =
        {
             Location1 = new Rectangle(100, 200, 250,  50),
             Location2 = new Rectangle(50, 100, 250,  50)

        };

            MapBox.CreateGraphics().DrawRectangles(blankPen, rects);
        }
    }
   private void MapBox_MouseDown(object sender, MouseEventArgs e)
    {
        if (Location1.Contains(e.Location))
       {

       }
   }

好的,这就是我的想法。它在错误的位置绘制矩形,但我认为这是图像缩放的原因

       private void GenerateRegions ()
    {

        MapBox.Invalidate();
        Pen blankPen = new Pen(Color.Transparent, 3);
        Console.WriteLine(CharacterLocation);

        if (CharacterLocation == "WorldMap")
        {
            Console.WriteLine(CharacterLocation);

            Rectangle[] rects =
        {
             Location1 = new Rectangle(64, 25, 20,  20),
             Location2 = new Rectangle(68, 70, 20,  20)

        };

            using (var g = Graphics.FromImage(MapBox.Image))
            {
                g.DrawRectangles(blankPen, rects);
                MapBox.Refresh();
            }
        }
   private void MapBox_MouseDown(object sender, MouseEventArgs e)
    {
        if (Location1.Contains(e.Location))
       {
            arealbl.Text = "You clicked it 1";
        }
        if (Location2.Contains(e.Location))
        {
            arealbl.Text = "You clicked it 2";
        }

}

我把钢笔换成黑色,这样我就可以看到它们了,但我看不到任何矩形。你可能想看看PictureBox的绘画活动。作为旁注,我永远不会猜到这是你的问题。因此,我需要将所有GenerateRegions()作为绘制事件来执行,或者我需要如何设置绘制事件?你只需要使用e.Graphics在绘制事件中进行绘制。无论哪种方式,这都不会阻止MouseDown代码的工作。因此,我将绘图项目移到了paint事件中,但是我要为arg传递什么到事件中呢?