2011-02-18 69 views
0

我有在C#中繪製一個一般性的問題。在一類Test我有一個方法來繪製:C#繪圖問題

public void Draw(Graphics g) 
    { 
     g.DrawLine(Pens.Black, x1, y1, x2, y2); 
    } 

現在我想提請在我在PictureBox主要形式稱爲PictureBox1

但我怎麼能畫呢?

通常情況下,你可以在PictureBox得出這樣的:

private void Draw() 
{ 
    Graphics g = PictureBox1.CreateGraphics(); 
    g.DrawLine(Pens.Black, x1, y1, x2, y2); 
} 

我知道這是一個愚蠢的問題,但我是一個初學者,並希望得到的基本知識;)

最良好的祝願:)

編輯:

對不起,我不都不懂你的帖子,你可以再次向我解釋

編輯2:

謝謝您的回答。但我不知道這是如何工作。

有我的課測試在這個類有Draw方法:

private void Draw() 
{ 
    Graphics g = PictureBox1.CreateGraphics(); 
    g.DrawLine(Pens.Black, x1, y1, x2, y2); 
} 

現在我想提請本梅索德在我的PictureBox這是我MainClass FormMain

我怎麼能在我的picturbox這在其他類繪製test.Draw()?

我現在希望它是明確的,對不起我的經驗不足 最良好的祝願

回答

0

你必須從Control對象創建Graphics對象。

例如:

override void myControl OnPaint (PaintEventArgs e) 
{ 
    Graphics g = e.Graphics 

    //do something with g 
} 

我也許可以提供你所期望的自定義​​類Test完成什麼指導的更好一點的信息。

+0

對不起,我不明白我要做 我想從我的測試類 獲得公共無效抽獎()..和想要繪製在主窗體中圖片框 – Chuck 2011-02-18 19:51:04

0

有幾個方法可以做到這一點:

  1. 你可以在你的測試類創建一個事件並訂閱表單中的事件。然後,你可以調用PictureBox1.CreateGraphics()沒有問題。
  2. 你可以窗體的當前實例傳遞給方法在測試類,並通過你傳遞給方法的實例參考圖片框。
2

每當paint事件被觸發時(這幾乎是所有的時間),picturebox控件都會覆蓋它上面的任何東西。所以,你需要連線到該事件:

this.pictureBox1.Paint += new PaintEventHandler(pictureBox1_Paint); 

然後在事件做您的繪圖:

void pictureBox1_Paint(object sender, PaintEventArgs e) 
{ 
    // Assuming your constructor takes coordinates as parameters 
    var t = new Test(0, 0, 100, 100); 
    t.Draw(e.Graphics); 
}
0

PictureBox控件設計爲內舉行的圖像。你需要做的是在這個圖像上繪製,然後你就不必亂用繪畫事件。這樣的:

var img = new Bitmap(); 
using (Graphics g = Graphics.FromImage(img)) { 
    g.DrawLine(Pens.Black, x1, y1, x2, y2); 
} 
pictureBox1.Image = img;