刷新不刷新
问题描述:
我做了一个用户控制和我直接在窗口中绘制一个矩形,这样的(这是一个简化版本):刷新不刷新
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_(); }
奇怪的是,第二次刷新实际上构成了问题:如果我将它注释掉,矩形是可见的,如果我在代码中放置该矩形,矩形将不可见。在真正的代码中,我必须绘制多于一个矩形,并且最后需要刷新,否则在删除旧绘图和新的准备就绪之间可以看到背景。
答
未存储控件的表面:在控件上绘制时,绘图不会保存,每次重新绘制控件时都需要重绘(例如刷新后)。要创建一个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_(); }
有什么问题?你想要矩形吗? – mrid
是的,我想要矩形是可见的。 –
为什么你需要第二次刷新呢? –