none
C#的讀秒跑不出來 RRS feed

  • 問題

  • 我在設計一個碼表器
    寫好程式無錯誤
    要開始建構時,我按下開始計時,顯示秒數的地方卻沒有跑出讀秒
    誰可以幫我看一下~我是哪裡漏掉?

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;

    namespace TimerClock
    {
    public partial class FormClock : Form
    {
    int counter = 0;

    public FormClock()
    {
    InitializeComponent();
    timer.Enabled = true;
    }



    void MainFormLoad(object sender, System.EventArgs e)
    {
    this.timer.Enabled = false;
    this.timer.Interval = 1;
    }

    public string timer_Tick(int time)
    {
    string hh, mm, ss;


    int s = time / 100;
    int m = s / 60;
    int h = m / 60;
    s = s % 60;

    if (isStart)
    {
    counter++;
    labelCounter.Text = (counter / 100.0) + "";
    }



    if (s < 10)
    {
    ss = "0" + s.ToString();
    }
    else
    {
    ss = s.ToString();
    }


    if (m < 10)
    {
    mm = "0" + m.ToString();
    }
    else
    {
    mm = m.ToString();
    }

    if (h < 10)
    {
    hh = "0" + h.ToString();
    }
    else
    {
    hh = h.ToString();
    }


    return hh + ":" + mm + ":" + ss;
    }


    bool isStart = false;

    private void buttonStart_Click(object sender, EventArgs e)
    {
    isStart = !isStart;

    if (isStart)
    {
    buttonStart.Text = "停止計時";
    }
    else
    {
    buttonStart.Text = "開始計時";
    }

    }
    void Timer1Tick(object sender, System.EventArgs e)
    {
    counter = counter + 1;
    this.labelCounter.Text = timer_Tick(counter);
    }


    private void buttonClear_Click_1(object sender, EventArgs e)
    {
    counter = 0;
    //歸零
    if (this.timer.Enabled == true)
    {
    this.buttonStart_Click(sender, e);
    labelCounter.Text = timer_Tick(counter);
    }
    else
    {
    labelCounter.Text = timer_Tick(counter);
    }
    }

    }
    }
    2011年10月27日 上午 04:02

解答

  • 你的timer的Enable 在FormLoad 就被設為false

    當然不會顯示

    所以你應該在

    buttonStart_Click中加入變更timer的Enable

            private void buttonStart_Click(object sender, EventArgs e)
            {
                isStart = !isStart;
    
                if (isStart)
                {
                    buttonStart.Text = "停止計時";
                }
                else
                {
                    buttonStart.Text = "開始計時";
                }
                timer.Enabled = isStart;
            }
    


    先查MSDN文件庫
    再用GOOGLE搜尋
    才到論壇來發問

    這是論壇不是技術支援中心
    沒有人得無償解答你的問題

    在標題或文章註明很急
    不會增加網友回覆速度
    • 已標示為解答 丘貝 2011年10月27日 下午 04:54
    2011年10月27日 上午 05:27
  • 你的程式 應該只有在 buttonStart 那邊設定 timer的enabled屬性

    其他地方如果有設timer的enabled屬性的話請全部拿掉(不管是true或false)

    回到你的ui設計畫面 檢查 timer的enabled屬性 應該要是 false , 如果是true 請改回false

    performClick的用法 參考MSDN Library

    請善用 F9 / F10 / F11


    先查MSDN文件庫
    再用GOOGLE搜尋
    才到論壇來發問

    這是論壇不是技術支援中心
    沒有人得無償解答你的問題

    在標題或文章註明很急
    不會增加網友回覆速度
    • 已標示為解答 丘貝 2011年10月27日 下午 06:23
    2011年10月27日 下午 05:23

所有回覆

  • 如果改成用Stopwatch

    我就不知道怎麼寫了....

    眼前的程式碼依舊無解嗎?

    2011年10月27日 上午 05:16
  • 您好

    1. 您的程式碼蠻亂的,請嘗試在 Timer1Tick 下中斷點,檢查是否有執行到

    2. 將你的程式傳到 SkyDrive 並提供網址,讓網友協助分析


    歡迎參觀我的Blog.NET菜鳥自救會
    2011年10月27日 上午 05:26
    版主
  • 你的timer的Enable 在FormLoad 就被設為false

    當然不會顯示

    所以你應該在

    buttonStart_Click中加入變更timer的Enable

            private void buttonStart_Click(object sender, EventArgs e)
            {
                isStart = !isStart;
    
                if (isStart)
                {
                    buttonStart.Text = "停止計時";
                }
                else
                {
                    buttonStart.Text = "開始計時";
                }
                timer.Enabled = isStart;
            }
    


    先查MSDN文件庫
    再用GOOGLE搜尋
    才到論壇來發問

    這是論壇不是技術支援中心
    沒有人得無償解答你的問題

    在標題或文章註明很急
    不會增加網友回覆速度
    • 已標示為解答 丘貝 2011年10月27日 下午 04:54
    2011年10月27日 上午 05:27
  • 不是timer的Enable問題

    主要是我的labelCounter不會隨著按鈕啟動而跳換成我要的00:00:00開始數秒

    兩個button反應很正常

    歸零也正常運作~可以讓labelCounter變成00:00:00且暫停數秒

    我一定是搞錯了甚麼~請大家再幫幫我找一下,要我找文件庫我也找不出所以然

     

    2011年10月27日 上午 06:22
  •  

    timer的enable如果是false

    以下這段根本不會執行

    void Timer1Tick(object sender, System.EventArgs e)
    {
          counter = counter + 1;
          this.labelCounter.Text = timer_Tick(counter);
    }

     

    如果你已經有定見

    那又何必上來問問題?

     


    先查MSDN文件庫
    再用GOOGLE搜尋
    才到論壇來發問

     

    這是論壇不是技術支援中心
    沒有人得無償解答你的問題

     

    在標題或文章註明很急
    不會增加網友回覆速度
    • 已編輯 Alex_Lee 2011年10月27日 上午 06:49
    2011年10月27日 上午 06:47
  • 試看看:
    void Timer1Tick(object sender, System.EventArgs e)
    {
       counter = counter + 1;
       this.labelCounter.Text = timer_Tick(counter);
       this.Update(); // add this to try
    }
    

    另外,我看你的 code,你的 Timer 確實沒有 Enabled = true。

    用 Debugger 追一下就會很清楚了。


    小朱的技術隨手寫:http://www.dotblogs.com.tw/regionbbs/
    雲端學堂Facebook: http://www.facebook.com/studyazure

    2011年10月27日 上午 07:14
    版主
  • Alex Lee說的是正確的, 恐怕是你沒搞清楚 Timer.Enable是幹嘛用的.

    啟動的順序是  建構函式 --> ...省略 ... --> Form Load

    雖然建構時Timer是Enable, 但你在Form load中就已經把 Timer的Enable設為False, 然後就再也沒有Enable過了. Timer當然不會動.

     


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。
    2011年10月27日 下午 02:54
    版主
  • 真的是這樣沒有錯~我發現到了~有個地方要改成trun

    但是就變成它一開始就先跑秒,沒辦法說我按開始才開始跑

    難道我又把Timer.Enable給搞錯了?還是順序放錯?

    不是說我已經有定見~只是我比較沒信心,所以才一直問

    問問題得到解答對我來說就像是吃了定心丸

    沒有真正得到答案,本來好好的程式碼會被我胡思亂改(看那上面程式碼那麼亂)

    我剛學習c#就落入不懂得物件導向的族群,給人感覺就是那種講了也沒用的樣子

    現在才知道去學會程式語言真的很困難

    2011年10月27日 下午 04:03
  • 我只想問  你有試過我po的那段程式嗎?
    先查MSDN文件庫
    再用GOOGLE搜尋
    才到論壇來發問

    這是論壇不是技術支援中心
    沒有人得無償解答你的問題

    在標題或文章註明很急
    不會增加網友回覆速度
    2011年10月27日 下午 04:06
  • if (isStart)
    {
    buttonStart.Text = "停止計時";
    }
    else
    {
    buttonStart.Text = "開始計時";
    }

    這邊有點奇怪, isStart= true時停止計時 ? 是不是應該改成

    if (isStart)
    {
    buttonStart.Text = "開始計時";
    }
    else
    {
    buttonStart.Text = "停止計時";
    }

    Timer1.Enable=isStart;

    By the way

    另一邊

    if (this.timer.Enabled == true)
    {
    this.buttonStart_Click(sender, e); <--你這個地方的用法是錯的, 你應該用 performClick方法
    labelCounter.Text = timer_Tick(counter);
    }
    else
    {
    labelCounter.Text = timer_Tick(counter);
    }


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。
    2011年10月27日 下午 04:10
    版主
  • 回Alex Lee

    有~有改~所以按鈕是正常的~可以停止或開始讀秒

    只是程式一開始執行就自動會跑

    我又亂套了~正在找原因

    2011年10月27日 下午 04:46
  • if (isStart)
    {
    buttonStart.Text = "停止計時";
    }
    else
    {
    buttonStart.Text = "開始計時";
    }

    按鈕判定是正常的

    if (this.timer.Enabled == true)
    {
    this.buttonStart_Click(sender, e);

    labelCounter.Text = timer_Tick(counter);
    }
    else
    {
    labelCounter.Text = timer_Tick(counter);
    }

    這個是歸零用

    順便加按buttonStart_Click 讓讀秒暫停

    我想到的公式是這樣

    至於 performClick方法 我還沒接觸到~不知道怎麼用

    2011年10月27日 下午 04:53
  • 你的程式 應該只有在 buttonStart 那邊設定 timer的enabled屬性

    其他地方如果有設timer的enabled屬性的話請全部拿掉(不管是true或false)

    回到你的ui設計畫面 檢查 timer的enabled屬性 應該要是 false , 如果是true 請改回false

    performClick的用法 參考MSDN Library

    請善用 F9 / F10 / F11


    先查MSDN文件庫
    再用GOOGLE搜尋
    才到論壇來發問

    這是論壇不是技術支援中心
    沒有人得無償解答你的問題

    在標題或文章註明很急
    不會增加網友回覆速度
    • 已標示為解答 丘貝 2011年10月27日 下午 06:23
    2011年10月27日 下午 05:23
  • 改回false了~也把多餘的給砍掉了

    void Timer1Tick(object sender, System.EventArgs e)
    這段也增加了if判定~終於正常了

    謝謝Alex Lee 整個程式碼看起來不會那麼亂了

     

     

    2011年10月27日 下午 06:27