我只有一個面板,想在上面畫畫。不使用它的 Paint 事件。所以我嘗試了這個,但它不起作用。
private void Form1_Load(object sender, EventArgs e)
{
Graphics g = panel1.CreateGraphics();
g.DrawRectangle(Pens.Black, 0, 0, 10, 10);
}
如果有人可以為我提供解釋和示例代碼,那就太好了。
uj5u.com熱心網友回復:
你用某種方式CreateGraphics畫東西synchronous。例如,繪制位圖并將其保存到磁盤。Paint如果您在面板的事件、設計器或表單構造函式中添加事件處理程式,可能是更好的方法:
panel1.Paint = this.OnPanel1_Paint;
并在該事件中繪畫:
private void OnPanel1_Paint(object sender, PaintEventArgs e)
{
var g = e.Graphics;
g.DrawRectangle(Pens.Black, 0, 0, 10, 10);
}
你不需要在這里放置這個圖形,只畫你想要的。
這樣,當您需要強制重繪時(例如,在面板中的每次單擊時添加另一個矩形),您必須呼叫panel1.Invalidate();. 此方法告訴 Windows 您需要重新繪制控制元件,并且 Windows 會盡快呼叫該事件。顯然,您需要知道要繪制什么,這取決于您的應用程式。您可以擁有一個List矩形并在每次單擊時添加一個新矩形。然后,在OnPanel1_Paint方法中,您繪制所有串列矩形。
uj5u.com熱心網友回復:
您的表單在觸發 Load 事件時不可見。您應該在表單變得可見后繪制矩形。一個解決方案是在表單上添加一個按鈕。你可以命名它drawRectangleButton。然后訂閱它的點擊事件并繪制。
private void drawRectangleButton_Click(object sender, EventArgs e)
{
Graphics g = panel1.CreateGraphics();
g.DrawRectangle(Pens.Black, 0, 0, 10, 10);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/485408.html
上一篇:'System.Data.OleDB'標準運算式中的資料型別不匹配。'
下一篇:ExcelIFORAND嵌套公式
