2015-04-28 58 views
-1

我得到JIT編譯錯誤運行此代碼FillEllipse函數錯誤

void draw(PaintEventArgs e) 
{ 
    Graphics gr =this.CreateGraphics(); 
    Pen pen = new Pen(Color.Black, 5); 
    int x = 50; 
    int y = 50; 
    int width = 100; 
    int height = 100; 
    gr.DrawEllipse(pen, x, y, width, height); 
    gr.Dispose(); 
    SolidBrush brush = new SolidBrush(Color.White); 
    gr.FillEllipse(brush, x,y,width,height); 
} 

錯誤說:系統參數異常:在 FillEllipse函數(刷無效的說法,INT32 X,INT32 Y,INT32寬度,INT 32高度);

+0

你一定要明白,你實際上是在配置'Graphics'對象,然後嘗試再次使用它,你呢? –

+0

啊對不起,我在發帖後提到它,但現在我有另一個問題,如何在不同的顯示器上使表單大小靜態?由不同的維度?對不起,謝謝 –

+0

使用'CreateGraphics'幾乎總是一個錯誤。你的'draw'方法有一個'PaintEventArgs'傳入它,我假設你從某種'Paint'事件中獲得。您應該使用來自該圖形的Graphics實例:'Graphics gr = e.Graphics'。並且不要丟棄它。 –

回答

0

既然你是通過PaintEventArgs e你可以並應該使用它的e.Graphics

由於您沒有創建它,請不要處理它!

但那些PensBrushes你創建你應該處置或更好,但創建它們在一個using子句!對於SolidBrush,我們可以使用標準Brush,這是我們不能改變的,也不能處理!

爲了確保填充不會覆蓋Draw,我已經切換了訂單。

所以,試試這個:

void draw(PaintEventArgs e) 
{ 
    Graphics gr = e.Graphics; 
    int x = 50; 
    int y = 50; 
    int width = 100; 
    int height = 100; 
    gr.FillEllipse(Brushes.White, x, y, width, height); 
    using (Pen pen = new Pen(Color.Black, 5)) 
     gr.DrawEllipse(pen, x, y, width, height); 
}