2013-07-16 74 views
0

IM上的代碼編輯器中工作(的WinForms)避免標籤閃爍使用定時器控制

,並用標籤像這樣的countline進出口工作:

http://oi42.tinypic.com/iypoub.jpg

使用此代碼:

private void timer_countline_Tick(object sender, EventArgs e) 
     { 
      updateNumberLabel(); 
     } 

private void updateNumberLabel() 
     { 
      //we get index of first visible char and number of first visible line 
      Point pos = new Point(0, 0); 
      int firstIndex = rtb.GetCharIndexFromPosition(pos); 
      int firstLine = rtb.GetLineFromCharIndex(firstIndex); 

      //now we get index of last visible char and number of last visible line 
      pos.X = ClientRectangle.Width; 
      pos.Y = ClientRectangle.Height; 
      int lastIndex = rtb.GetCharIndexFromPosition(pos); 
      int lastLine = rtb.GetLineFromCharIndex(lastIndex); 

      //this is point position of last visible char, we'll use its Y value for calculating numberLabel size 
      pos = rtb.GetPositionFromCharIndex(lastIndex); 


      //finally, renumber label 
      numberLabel.Text = ""; 
      for (int i = firstLine; i <= lastLine + 1; i++) 
      { 
       numberLabel.Text += i + 1 + "\n"; 
      } 

     } 

定時器設置間隔爲1。 label dock = left。 現在問題是我每次運行該程序時,標籤閃爍不停,如此之快。 即使我改變間隔仍然是同樣的事情。

但是當我將updateNumberLabel()傳遞給textchange事件時,它每次仍然閃爍,我在richtextbox上添加一個 字符,或者我按下空格鍵。

這樣的:http://oi40.tinypic.com/a43gcy.jpg

現在我的問題是如何才能避免這種情況?或者是否有我能做的,以避免在更新時整個標籤閃爍 ?

非常感謝您的幫助!

+0

閃爍,你的意思是閃爍?或者它是一個穩定的眨眼? – cokeman19

+0

@ cokeman19當我使用計時器時快速閃爍......我傳遞給textchange事件的時間閃爍了我在richtextbox上添加文本的時間 – Elegiac

+3

您可能會從啓用雙緩衝(無論是在標籤級別還是可能在表單級別)受益。這裏有兩個例子:http://stackoverflow.com/questions/3816362/winforms-label-flickering。 – cokeman19

回答