我的应用程序中有两个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事件中删除代码,并将其移至另一个对位置进行更新的事件。如果可以的话,我想在带有该人姓名的圆圈旁边贴上标签。现在这是一个概念证明,我只需要帮助就可以使表格上的圆圈开始。
谢谢。
答案 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()
,而是使用当前图像创建了图形对象。