簡體   English   中英

DrawRectangle不起作用

[英]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);
}

我還更改了方法,以便僅傳遞MouseEventArgsLocation ,因為您的繪制方法不需要了解有關鼠標事件的任何知識,而只需了解Point
並請注意,不需要調用“在PenGraphics上進行Dispose ”, using語句可以為您完成此操作。
而且,您可以考慮使用.NET命名約定 ,並將方法重命名為Colocar

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM