[英]DrawRectangle doesn't work
我在我創建的課程上有一個矩形。 函數“ 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時,我看到所有值都可以,但是它沒有繪制任何內容。
你能幫助我嗎?
謝謝!
您正在創建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
的Location
,因為您的繪制方法不需要了解有關鼠標事件的任何知識,而只需了解Point
。
並請注意,不需要調用“在Pen
或Graphics
上進行Dispose
”, using
語句可以為您完成此操作。
而且,您可以考慮使用.NET命名約定 ,並將方法重命名為Colocar
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.