2017-10-05 177 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_(); }