2017-02-25 35 views
1

我有一個叫做Menu.cs的主窗口窗體,在這個類中我有兩個按鈕叫'線條'和'多邊形',每個按鈕打開它的窗口。多邊形有一個圖片,我要畫出x和y軸如何使用C#在一個picturebox上繪製字符串後立即顯示它?

private void botonPoligonos_Click(object sender, EventArgs e) 
{ 
    WindowPolygons objPolygons = new WindowPolygons(); 
    objPolygons.Show(); 
} 

其實我有一個名爲按鈕做「drawAxes」:

public void drawAxes_Click() 
{ 
    drawAxes(); 
} 

public void drawAxes() 
{ 
    Graphics papel = pictureBox1.CreateGraphics(); 
    Pen lapiz = new Pen(Color.Black); 
    //Dibujo de ejes X y Y 
    papel.DrawLine(lapiz, 20, 425, 742, 425); 
    papel.DrawLine(lapiz, 20, 425, 20, 20); 
    papel.DrawString("X", myFont, Brushes.Black, new Point(745, 418)); 
    papel.DrawString("Y", myFont, Brushes.Black, new Point(14, 5)); 
} 

但我不想這樣做一個按鈕,我想繪製軸,因爲圖片框顯示,我已經試圖把方法drawAxes()在構造函數中,在加載器WindowPolygons.csobjPolygons.show()但沒有任何反應,有誰知道該怎麼做?

這是我第一次拍的問題,謝謝:)

+1

Winforms圖形基本規則#1: 千萬不要使用'control.CreateGraphics'!使用'Graphics g = Graphics.FromImage(bmp)'或者在控件的'Paint'事件中使用'e.Graphics'參數來繪製'Bitmap bmp'。這裏'pBox.Paint'事件加'pbox.Invalidate()'是要走的路! – TaW

回答

-2

在構造函數或形式的負載,形式仍然沒有被塗。所以穿上元素的形式油漆事件的方法:

protected void pictureBox1_Paint(object sender, PaintEventArgs e) 
{ 
    Graphics papel = e.Graphics(); 
    Pen lapiz = new Pen(Color.Black); 
    //Dibujo de ejes X y Y 
    papel.DrawLine(lapiz, 20, 425, 742, 425); 
    papel.DrawLine(lapiz, 20, 425, 20, 20); 
    papel.DrawString("X", myFont, Brushes.Black, new Point(745, 418)); 
    papel.DrawString("Y", myFont, Brushes.Black, new Point(14, 5)); 
} 
+0

我沒有參加代碼,因爲你說這是按鈕點擊的作品。 –

0

使用下面的代碼和以下設置:

private void drawAxes(Graphics g, Rectangle rect) 
{ 
    Pen lapiz = new Pen(Color.Black); 
    //Dibujo de ejes X y Y 
    g.DrawLine(lapiz, 20, rect.Height - 20, rect.Width - 20, rect.Height - 20); 
    g.DrawLine(lapiz, 20, rect.Height - 20, 20, 20); 
    g.DrawString("X", Font, Brushes.Black, new Point(rect.Width - 17 , rect.Height - 27)); 
    g.DrawString("Y", Font, Brushes.Black, new Point(14, 5)); 
} 

private void pictureBox1_Paint(object sender, PaintEventArgs e) 
{ 
    drawAxes(e.Graphics, pictureBox1.Bounds); 
} 

private void pictureBox1_Resize(object sender, EventArgs e) 
{ 
    pictureBox1.Invalidate(); 
} 

有pictureBox1停靠到窗體(屬性Dock設置爲Fill),所以它會自動隨窗體一起增長。

將方法pictureBox1_Paint附加到pictureBox1的Paint-Event。

將方法pictureBox1_Resize附加到pictureBox1的Resize-Event。

Invalidate()pictureBox1_Resize()的調用要求pictureBox1在其大小發生更改時重新繪製它。

當需要繪製圖片框時,自動調用方法pictureBox1_Paint(),要麼是因爲初始顯示,要麼是因爲大小已更改或其他因素。它調用drawAxes來執行實際繪圖,傳遞Graphics對象以繪製圖片框的當前大小。

相關問題