控件不是同时绘制的

时间:2013-05-05 12:30:19

标签: c# winforms onpaint

我有一个表格,我用ShowDialog提出,其中包含几个文本框,标签和一个按钮。我遇到的问题是在表单本身之前绘制文本框,并绘制其他控件。

我重写OnPaint方法我不确定这是否会导致问题:

protected override void OnPaint(PaintEventArgs e)
{
    ControlPaint.DrawBorder(e.Graphics, e.ClipRectangle, Color.Black, ButtonBorderStyle.Solid);
    base.OnPaint(e);
}

这只是一个轻微的延迟,但它是可见和恼人的。谢谢。

顺便说一句,表格是双重缓冲的。

编辑:我已经确定问题是表单没有FormBorderStyle。如果FormBorderStyle设置为Sizable,则不会发生此问题。但请注意,必须使用FormBorderStyle.None作为我的边框样式,所以我还没有找到解决方案。

1 个答案:

答案 0 :(得分:1)

尝试将其添加到对话框窗体中:

    protected override CreateParams CreateParams
    {
        get
        {
            // Activate double buffering at the form level.  All child controls will be double buffered as well.

            CreateParams cp = base.CreateParams;

            cp.ExStyle |= 0x02000000;   // WS_EX_COMPOSITED

            return cp;
        }
    }