2013-03-08 3 views
0

Я создал UserControl, который разбил экран на прямоугольники, но мой элемент управления выполняет OnPaintBackground Много раз, пока он должен выполнить его только один, пожалуйста, помогите мне, потому что очень важно выполнить его только один раз, потому что scrren начинает много метаться.Выполнение OnPaintBackground Много раз C#?

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; 
    } 

} 

выход является то, что экран flickaring много при рисовании фона снова и снова ......

+0

Использование двойной буферизации. – SLaks

+0

@SLaks вы можете указать, как это сделать –

ответ