c# - 调整大小时清除表面

时间:2010-05-13 14:56:58

标签: c# .net graphics custom-controls resizable

我正在尝试为C#.Net中的Windows窗体应用程序构建自己的自定义控件。目前,我使用paint事件绘制一些矩形和其他图形元素。 当我现在调整应用程序表单大小以适应桌面大小时,所有元素都被重新绘制(这正是我需要的行为),但旧的元素显示在后台。

这就是我现在正在做的事情:

Pen penDefaultBorder = new Pen(Color.Wheat, 1);
int margin = 5;
private void CustomControl_Paint(object sender, PaintEventArgs e) {
    CustomControl calendar = (CustomControl)sender;
    Graphics graphics = e.Graphics;
    graphics.Clear(Color.WhiteSmoke);

    graphics.DrawRectangle(penDefaultBorder, margin, margin, calendar.Width - margin * 2, calendar.Height - margin * 2);
    //...
}

不显示graphics.Clear,也不添加graphics.FillRectangle(...)将隐藏表面上的旧矩形。

想法?谢谢大家。

2 个答案:

答案 0 :(得分:2)

Paint事件通常不会请求整个画布的更新,只是请求PaintEventArgs中指定的区域。我猜测正在发生的事情是在PaintEventArgs中只传递了新曝光的画布区域。

这是您不应在Paint事件中进行任何渲染的原因之一。您应该渲染到屏幕外的位图 - 缓冲区 - 并从该缓冲区复制到Paint事件中的控件画布。

在这里或在Google上搜索“双缓冲”会为您提供很多技术示例。

答案 1 :(得分:1)

您是否尝试.Invalidate()使表单重绘?