none
程式寫法 RRS feed

  • 問題

  • 大大我想請問一個程式寫法,由於我在Form1_Paint(object sender, PaintEventArgs e)之下,寫了很多程式,可是不是全部都要重覆一直用,所以我想將他們寫成比較細的函式,我的方法如下,由於執行完是不對的,但程式本身是對的,因為我把它們全部寫到Form1_Paint下,是可以正常執行,請各位大大幫助我,我是否有哪裡呼叫錯誤,謝謝
            private void Form1_Paint(object sender, PaintEventArgs e)
            {        
                this.Paint += new PaintEventHandler(DrawGrid);
                DisplayLabel();
                this.Paint += new PaintEventHandler(DrawRecordData);
            }
            private void DrawGrid(object sender, PaintEventArgs e)
            {}
            private void DisplayLabel()
            {}
            private void DrawRecordData(object sender, PaintEventArgs e)
            {}
    2009年4月2日 上午 10:52

解答

  • 小綠兒:
              你在Paint事件區塊又去 新增PaintEventHandler,會變成一路往上變大
              所以這件事應該會這樣發生<以下次序為引發Paint事件的順序>
              第一次:它把 PaintEventHandler(DrawGrid) 和  PaintEventHandler(DrawRecordData)加進來,不過這一次不會執行,所以只執行了    DisplayLabel()
              第二次:它會執行DisplayLabel->DrawGrid->DrawRecordData然後又把 PaintEventHandler(DrawGrid) 和  PaintEventHandler(DrawRecordData)再度加進來

            第三次:它會執行DisplayLabel->DrawGrid->DrawRecordData->DrawGrid->DrawRecordData然後又把 PaintEventHandler(DrawGrid) 和  PaintEventHandler(DrawRecordData)再度加進來
       
             ...一直越來越多.....



            


    • 已標示為解答 冰糖旋風 2009年4月3日 上午 12:42
    2009年4月2日 下午 03:08
    版主
  • 當視窗被蓋住又顯現
    或是縮小放大
    都會需要重畫視窗
    這時就會觸發

    http://www.dotblogs.com.tw/larrynung/
    • 已標示為解答 冰糖旋風 2009年4月3日 上午 02:19
    2009年4月3日 上午 01:38
  • public class MyForm:Form
    {
       private int paintCount=0;
      
        public MyForm(){
           Ininxxxxxx();//忘了怎麼拼(工具產生的)
           this.Paint+=new PaintEventHandler(Form1_Paint);
        }
    private Form1_Paint(object sender, PaintEventArgs e){
           paintCount++;
    }

    private void Form_Closing(object sender,EventArgs e){
           MessageBox.Show("繪圖次數"+paintCount.ToString()); 

    }
    • 已標示為解答 冰糖旋風 2009年4月3日 上午 02:20
    2009年4月3日 上午 01:40

所有回覆

  • 小綠兒:
              你在Paint事件區塊又去 新增PaintEventHandler,會變成一路往上變大
              所以這件事應該會這樣發生<以下次序為引發Paint事件的順序>
              第一次:它把 PaintEventHandler(DrawGrid) 和  PaintEventHandler(DrawRecordData)加進來,不過這一次不會執行,所以只執行了    DisplayLabel()
              第二次:它會執行DisplayLabel->DrawGrid->DrawRecordData然後又把 PaintEventHandler(DrawGrid) 和  PaintEventHandler(DrawRecordData)再度加進來

            第三次:它會執行DisplayLabel->DrawGrid->DrawRecordData->DrawGrid->DrawRecordData然後又把 PaintEventHandler(DrawGrid) 和  PaintEventHandler(DrawRecordData)再度加進來
       
             ...一直越來越多.....



            


    • 已標示為解答 冰糖旋風 2009年4月3日 上午 12:42
    2009年4月2日 下午 03:08
    版主
  • 看不懂?
    執行錯了,就是邏輯有問題.
    2009年4月3日 上午 12:28
  • 大大我了解你的意思了,謝謝您
    2009年4月3日 上午 12:40
  • 你的Code 我覺得以後問題會很大.
    寫WindowsForm 或其它種類的程式你要知道整支程式的生命周期及哪一個地方該做什麼事.
    你在Paint 事件裡去註冊其它的繪圖事件,其它的繪圖事件又會呼叫到Paint事件,程式會卡到無限迴圈裡.
    而你在這個地方去註冊事件,我覺得太慢,我覺得要在表單初始化階段或Form_Load事件時就要去註冊了.而不是圖形在畫或圖形已顯示的階段在畫.
    • 已標示為解答 冰糖旋風 2009年4月3日 上午 02:19
    • 已取消標示為解答 冰糖旋風 2009年4月3日 上午 02:20
    2009年4月3日 上午 01:10
  • 大大那可以問你一下, paint是不是繪畫製很多次,我意思是從我開表單到作一些動作到最後,他執行的次數,謝謝
    2009年4月3日 上午 01:21
  • 當視窗被蓋住又顯現
    或是縮小放大
    都會需要重畫視窗
    這時就會觸發

    http://www.dotblogs.com.tw/larrynung/
    • 已標示為解答 冰糖旋風 2009年4月3日 上午 02:19
    2009年4月3日 上午 01:38
  • public class MyForm:Form
    {
       private int paintCount=0;
      
        public MyForm(){
           Ininxxxxxx();//忘了怎麼拼(工具產生的)
           this.Paint+=new PaintEventHandler(Form1_Paint);
        }
    private Form1_Paint(object sender, PaintEventArgs e){
           paintCount++;
    }

    private void Form_Closing(object sender,EventArgs e){
           MessageBox.Show("繪圖次數"+paintCount.ToString()); 

    }
    • 已標示為解答 冰糖旋風 2009年4月3日 上午 02:20
    2009年4月3日 上午 01:40
  • 那大大請問一下,若是滑鼠移過這些動作會重新繪製嗎,謝謝
    2009年4月3日 上午 01:42
  • 應該是會(我沒研究過).
    我用WPF 這些表單都是系統自己做,我沒有這方面的問題.
    所以你要請教其他的先進哪些情形會重劃.
    當然我建議你自己測,然後將結果貼出.

    2009年4月3日 上午 01:48
  • 會吧
    你滑過的地方
    他要復原ㄚ
    用好說大大的程式試試看就知道了

    http://www.dotblogs.com.tw/larrynung/
    2009年4月3日 上午 01:48
  • 我測試的時候是會地,我是利用panel上的paint,謝謝大大们的幫助
    2009年4月3日 上午 02:20