2017-02-27 22 views
0

我在我創建的類上有一個矩形。函數「DrawRectangle」不繪製任何東西。我把下面的代碼: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修飾符public。所有編譯正確,工作完美,但是當我去g.DrawRectangle我看到所有的值都OK,但它沒有畫任何東西。

你能幫我嗎?

謝謝!

+0

你在做什麼?現在,您正在創建一個新的窗體實例,並在每個MouseDown的新實例上創建一個圖形上下文。您每次都將矩形繪製爲新形式,並且從我所看到的甚至沒有顯示新形式。 –

+0

哦,不,我不想那麼做!我想從我的「Unidad」類創建一個Rectangle。你能幫我解決嗎? – Imrik

回答

4

您正在創建一個新實例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上沒有必要撥打Disposeusing聲明正在爲您執行此操作。
而且您可能會考慮使用.NET naming conventions並重命名您的方法Colocar

+0

完美,它的作品。謝謝!!! – Imrik