0

我创建了一个用户控件,将屏幕分成矩形,但我的控件正在执行OnPaintBackground很多次,而它应该只执行一次,请帮助我,因为只执行一次非常重要,因为屏幕开始闪烁很多。

public partial class Schedual : UserControl
{
    int days;

    public int Days
    {
        get { return days; }
        set
        {
            days = value;
            change = true;
            Invalidate(true);
        }
    }

    int periods;

    public int Periods
    {
        get { return periods; }
        set
        {
            periods = value;
            change = true;
            Invalidate(true);
        }
    }

    Brush brush;

    bool change = false;

    List<Panel> panels;

    public Schedual()
    {
        InitializeComponent();
        this.ResumeLayout(true);
        this.days = 1;
        this.periods = 1;
        brush = Brushes.White;
        change = false;
     }

    protected override void OnPaint(PaintEventArgs e)
    {
        //stuff ....... or base.OnPaint(e);
    }

    protected override void OnPaintBackground(PaintEventArgs e)
    {
        Graphics g = e.Graphics;
        var h = this.Height / days;
        var w = this.Width / periods;
        for (int i = 0; i < days; i++)
        {
            for (int j = 0; j <= periods; j++)
            {
                g.FillRectangle(brush, j * w, i * h, w, h);
                if (change)
                {
                    AddPanel(j * w, i * h, w, h);
                }
                g.DrawLine(Pens.Black, 0, i * h, this.Right, i * h); //draw the horizantle lines
                g.DrawLine(Pens.Black, j * w, 0, this.Bottom, j * w); //draw the verical lines
            }
        }
        change = false;
    }

}

输出是一遍又一遍地绘制背景时屏幕闪烁很多......

4

1 回答 1

0

双缓冲...

在此处查看更多信息 - http://msdn.microsoft.com/en-us/library/3t7htc9c.aspx

于 2013-03-08T15:11:32.507 回答