2017-10-05 161 views
0

我做了一個用戶控制和我直接在窗口中繪製一個矩形,這樣的(這是一個簡化版本):刷新不刷新

private int rec_len = 200; 
private void Draw_() 
{ 
    Pen pn = new Pen(Color.Black, WIDTH_LINE); 
    Graphics graph = this.CreateGraphics(); 
    graph.Clear(Color.Transparent); 
    this.Refresh(); 
    graph.DrawRectangle(pn, 20, 10, rec_len, 40); 
    this.Refresh(); 
    graph.Dispose(); 
} 
public void button_Build_Click(object sender, EventArgs e) 
{ rec_len += 10; Draw_(); } 

奇怪的是,第二次刷新實際上構成了問題:如果我將它註釋掉,矩形是可見的,如果我在代碼中放置該矩形,矩形將不可見。在真正的代碼中,我必須繪製多於一個矩形,並且最後需要刷新,否則在刪除舊繪圖和新的準備就緒之間可以看到背景。

+0

有什麼問題?你想要矩形嗎? – mrid

+0

是的,我想要矩形是可見的。 –

+1

爲什麼你需要第二次刷新呢? –

回答

0

未存儲控件的表面:在控件上繪製時,繪圖不會保存,每次重新繪製控件時都需要重繪(例如刷新後)。要創建一個persistante圖形,您可以創建一個位圖,在位圖上繪製並將此位圖分配給BackgroundImage屬性。

Bitmap bmp = new Bitmap(WIDTH, HEIGHT); 
void Initialize() 
{ 
    this.BackgroundImage = bmp; 
} 

private int rec_len = 200; 
private void Draw_() 
{ 
    Pen pn = new Pen(Color.Black, WIDTH_LINE); 
    using (Graphics graph = Graphics.FromImage(bmp)) 
    { 
     graph.Clear(Color.Transparent); 
     this.Refresh(); 
     graph.DrawRectangle(pn, 20, 10, rec_len, 40); 
     this.Refresh(); 
    } 
} 
public void button_Build_Click(object sender, EventArgs e) { rec_len += 10; Draw_(); }