none
繪圖會閃爍..? RRS feed

  • 問題


  • 最近小弟寫了小時鐘的程式,用GDI+畫出時鐘的框框和秒針。
    然後用 Invalidate每秒更新,可是框框會閃爍...
    有什麼辦法能避免嗎?
    2009年6月3日 上午 08:57

解答

  •         Bool needShow;
            Graphics g;
            private void show_Click(object sender, EventArgs e)
            {
               needShow=true;
            }
    
            private void hide_Click(object sender, EventArgs e)
            {
               needShow=false;
            }
    
            private void timer1_Tick(object sender, EventArgs e)
            {
                Invalidate();
            }
            private void Form1_Paint(object sender, PaintEventArgs e)
            {
                if (needShow)
               {
                  //Show Clock
               }
            }

    http://www.dotblogs.com.tw/larrynung/
    • 已標示為解答 Wang40 2009年6月4日 上午 01:44
    2009年6月4日 上午 01:27

所有回覆

  • Double Buffer
    請參考
    http://blog.xuite.net/alwaysfuturevision/liminzhang/9144981
    http://www.dotblogs.com.tw/larrynung/
    2009年6月3日 上午 09:09
  • 如 蹂躪 大大 說的,使用雙緩衝,以下還有一些做動畫的例子

    http://www.codeproject.com/KB/GDI-plus/tony2.aspx

    http://www.csharphelp.com/archives2/archive357.html
    2009年6月3日 上午 09:37
    版主
  • hi,多謝解答。
    再請問一下...
    我要用button來顯示、隱藏畫出來的時鐘。
    可是按下show鍵,他就閃一下就不見了,請問這個要如何解呢?

    2009年6月3日 下午 02:18
  • 您的 show鍵 是什麼東西 ? 也許把您有經過整理已經有打註解的程式碼 貼上來看看
    2009年6月3日 下午 03:09
    版主
  • hi,show是我按鍵的名字。
    我放兩個button,一個是show,一個是hide;
    我的問題是...加了Invalidate,要如何讓使用者控制顯示和隱藏?
    我的方法是這樣:
    可是按了show後圖案就閃一下不見了..
      Graphics g;
            private void show_Click(object sender, EventArgs e)
            {
                g = this.CreateGraphics();
                g.FillEllipse(Brushes.Black, 10, 10, 150, 150);
            }

            private void hide_Click(object sender, EventArgs e)
            {
                g.Clear(this.BackColor);
            }

            private void timer1_Tick(object sender, EventArgs e)
            {
                Invalidate();
            }

    2009年6月3日 下午 03:51
  • 以下方法是猜測的,您要不要考慮控制 timer1

            private void show_Click(object sender, EventArgs e)
            {
                 timer1.Enable = True;
            }

            private void hide_Click(object sender, EventArgs e)
            {
                 timer1.Enable = False;
            }



    能不能把關於 Clock 繪圖的部分都貼出來 ?
    2009年6月3日 下午 04:26
    版主
  •         Bool needShow;
            Graphics g;
            private void show_Click(object sender, EventArgs e)
            {
               needShow=true;
            }
    
            private void hide_Click(object sender, EventArgs e)
            {
               needShow=false;
            }
    
            private void timer1_Tick(object sender, EventArgs e)
            {
                Invalidate();
            }
            private void Form1_Paint(object sender, PaintEventArgs e)
            {
                if (needShow)
               {
                  //Show Clock
               }
            }

    http://www.dotblogs.com.tw/larrynung/
    • 已標示為解答 Wang40 2009年6月4日 上午 01:44
    2009年6月4日 上午 01:27

  • 多謝各位解答,找到答案了。

    2009年6月4日 上午 01:44