我在一个由我创建的类上有一个矩形。函数"DrawRectangle“没有画任何东西。我把代码写在下面:
我自己的课程(Unidad.cs):
class Unidad
{
//Constructor
public Unidad(string tipo, int movimiento)
{
tipoUnidad = tipo;
movimientoUnidad = movimiento;
}
//Propiedades
public string tipoUnidad {get; set;}
public int movimientoUnidad { get; set; }
//Método para dibujar unidad
public void colocar(MouseEventArgs e)
{
Form1 myf = new Form1();
using (Graphics g = myf.picboxFondo.CreateGraphics())
{
Pen pen = new Pen(Color.Red, 2);
g.DrawRectangle(pen, e.X, e.Y, 20, 20);
pen.Dispose();
g.Dispose();
}
}
}主修班:
public partial class Form1 : Form
{
//Prueba de clase
Unidad prueba;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
picboxFondo.Size = ClientRectangle.Size;
prueba = new Unidad("I", 20);
}
private void picboxFondo_MouseDown(object sender, MouseEventArgs e)
{
prueba.colocar(e);
}
}我有picboxFondo修饰符公开。所有的编译都是正确的,工作也很完美,但是当我转到g.DrawRectangle时,我看到所有的值都是可以的,但是它没有绘制任何东西。
你能帮帮我吗?
谢谢!
发布于 2017-02-27 11:28:56
您正在为您的Form1类创建一个新实例,并尝试使用该新实例的PictureBox (根本没有显示)。
相反,可以将要作为参数绘制的控件传递给colocar方法:
public void colocar(Point p, Control control)
{
using (Graphics g = control.CreateGraphics())
{
using (Pen pen = new Pen(Color.Red, 2))
{
g.DrawRectangle(pen, p.X, p.Y, 20, 20);
}
}
}用你的方式这样称呼它:
private void picboxFondo_MouseDown(object sender, MouseEventArgs e)
{
prueba.colocar(e.Location, picboxFondo);
}我还更改了方法,以便只传递MouseEventArgs的MouseEventArgs,因为绘图方法不需要了解任何有关鼠标事件的信息,只需要了解Point。
请注意,不需要在Pen或Graphics上调用using,using语句正在为您执行此操作。
您可以考虑使用.NET命名约定并重命名方法Colocar。
https://stackoverflow.com/questions/42484453
复制相似问题