2017-02-27 2 views
0

私が作成したクラスに長方形があります。関数 "DrawRectangle"は何も描画しません。私はpicboxFondo修飾子を公開していDrawRectangleは機能しません

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); 
    } 
} 

私自身のクラス(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(); 
     } 
    } 
} 

メインクラスIは、以下のコードを置きます。すべて正しくコンパイルされ、完璧に動作しますが、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); 
} 

を私はまた、のLocationしか渡さないようにメソッドを変更しました。描画メソッドはマウスイベントについて何も知る必要がないため、Point
PenまたはGraphicsDisposeを呼び出す必要はありません。usingの声明はこれを実行しています。
.NET naming conventionsを使用し、メソッド名をColocarに変更することを検討することもできます。

+0

完璧な作品です。ありがとう!!! – Imrik

関連する問題