从另一个winform在pictureBox上画一个圆

时间:2019-06-06 17:21:50

标签: c# winforms

我的应用程序中有两个Winform。其中一种形式是带有图片框,其中包含我们的建筑平面图的jpg。主要形式具有进行面部识别的代码,以识别进入某些区域的人。我被要求修改此程序,以在建筑平面图上显示已确定的个人位置。我有一个数据库,其中包含应映射到建筑平面图的位置的所有X,Y坐标。我环顾四周,试图找到一些代码,当该人通过擦除所有现有的圆并更新此新圆时,在建筑物的各个区域前进时,将在地图上的X,Y坐标处绘制一个圆。因此,在地图表单上,我输入了以下代码:

public void DrawCircle(int x, int y)
    {
        Graphics gf = pictureBox1.CreateGraphics();
        gf.DrawEllipse(new Pen(Color.Red), new Rectangle(x, y, 400, 400));
        pictureBox1.Refresh();
    }

然后从主窗体上的update方法(现在单击按钮进行测试)开始,我在地图窗体上将此方法称为。该方法被调用,但是圆圈未显示在表单上。我已经尝试了刷新和无效,这两种方法似乎都无法在图像上绘制圆圈。

多年来我一直没有进行过winforms开发,所以我确定我在某些地方缺少管道。这是主窗体上的代码:

LocationMap map = new LocationMap();

public Form1()
{
    InitializeComponent();
    //set up signalR
    UserName = "MovementHub1";
    ConnectAsync();
    //show the map screen
    map.Show();
    map.WindowState = FormWindowState.Maximized;
    ...

然后在click事件中(现在用于测试),我有以下代码:

private void button2_Click(object sender, EventArgs e)
    {
        map.DrawCircle(340, 258);
    }

一旦我在另一个表单上绘制了圆圈,那么我将从click事件中删除代码,并将其移至另一个对位置进行更新的事件。如果可以的话,我想在带有该人姓名的圆圈旁边贴上标签。现在这是一个概念证明,我只需要帮助就可以使表格上的圆圈开始。

谢谢。

1 个答案:

答案 0 :(得分:0)

我自己尝试了一下,然后想到了:

Form1.cs

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace StackoverflowHelp
{
  public partial class Form1 : Form
  {
    Form2 form = new Form2();

    public Form1()
    {
      InitializeComponent();
      form.Show();
    }

    private void Button1_Click(object sender, EventArgs e)
    {
      form.DrawCircle(100, 100);
    }
  }
}

Form2.cs

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace StackoverflowHelp
{
  public partial class Form2 : Form
  {
    public Form2()
    {
      InitializeComponent();

      DrawCircle(10, 10);
    }

    public void DrawCircle(int x, int y)
    {
      Graphics gf = Graphics.FromImage(pictureBox1.Image);
      gf.DrawEllipse(new Pen(Color.Red), new Rectangle(x, y, 20, 20));
      gf.Dispose();
      pictureBox1.Refresh();
      pictureBox1.Invalidate();
      pictureBox1.Update();
    }
  }
}

我没有使用图片框调用CreateGraphics(),而是使用当前图像创建了图形对象。