如何告诉控件不重绘自己?

时间:2010-11-30 16:21:37

标签: c# winforms

我尝试过类似的事情:

horizontalPictureScroller1.SuspendLayout();
horizontalPictureScroller1.DeleteSelectedImages();
horizontalPictureScroller1.ResumeLayout();

但是当我运行DeleteSelectedImages()方法时,它仍然在视觉上滞后。

有没有办法手动告诉控件不重绘自己,直到我告诉它再次开始自绘?

使用Windows窗体和.NET 4

1 个答案:

答案 0 :(得分:2)

我认为您的问题是在删除操作期间屏幕更新导致闪烁。

SuspendLayout和ResumeLayour方法only suspend the layout of the control。它不会阻止控件重绘或调整大小。

您应该在控件上启用DoubleBuffering

您应该创建一个从您在此处使用的WinForms控件派生的新控件类。在此类的构造函数中,使用SetStyle方法启用双缓冲。

假设您的控件horizontalPictureScroller1是PictureBox -

class MyControl : System.Windows.Forms.PictureBox
    {
        public MyControl()
        {
            this.SetStyle(ControlStyles.DoubleBuffer |
                ControlStyles.UserPaint |
                ControlStyles.AllPaintingInWmPaint,
                true);
        }
    }