刷新不刷新

时间:2017-10-05 09:37:14

标签: c#

我制作了一个用户控件,我直接在窗口中绘制一个矩形,就像这样(这是一个简化版本):

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_(); }

奇怪的是,第二次刷新实际上存在问题:如果我将其注释掉,则矩形是可见的,如果我在代码中使用它,则矩形不可见。在实际代码中,我必须绘制多个矩形,并且我希望最后刷新,否则在我擦除旧绘图的时刻和新绘图准备好的那一刻之间可以看到背景。

1 个答案:

答案 0 :(得分:0)

未存储控件的表面:在控件上绘制时,不会保存图形,并且每次重新绘制控件时都需要重新绘制(例如,刷新后)。要创建持久性图形,可以创建位图,在位图上绘制并将此位图指定给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_(); }