none
ProgressBar的使用方式 RRS feed

  • 問題

  • 小弟問題是這樣的:

    我在FORM上放了一個ProgressBar,用來顯示我測試進度

    我的測試時間是用TEXTBOX1來設定的,好比說我打上60,就會測試60秒

    那我該如何使用ProgressBar,我拿了手邊工具書翻..結果沒有介紹..

    我的問題是,當我在TEXTBOX1打上N秒時,ProgressBar該如何對應此進度?

    ProgressBar放置的位置(TIMER嗎)?

     

    2010年4月1日 上午 02:17

解答

  •     Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    
            Me.ProgressBar1.PerformStep()
            'Application.DoEvents()
    
        End Sub
    
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    
            Dim TestTime As Integer = CInt(Me.TextBox1.Text) '測試時間
    
            Me.ProgressBar1.Minimum = 1
            Me.ProgressBar1.Maximum = TestTime
            Me.ProgressBar1.Value = 1
            Me.ProgressBar1.Step = 1
            Me.Timer1.Interval = 1000
            Me.Timer1.Start()     
    
        End Sub

    • 已標示為解答 Lolota Lee 2010年4月8日 上午 02:22
    2010年4月1日 上午 05:17
  • 線上手冊提供的範例,有三種多緒方式跑進度列,你可以去看看該程式碼:

    http://www.google.com.tw/search?hl=zh-TW&source=hp&q=MultiThread+%E7%AF%84%E4%BE%8B+site%3Asocial.msdn.microsoft.com%2FForums%2Fzh-TW%2F&meta=&aq=f


    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    • 已標示為解答 Lolota Lee 2010年4月8日 上午 02:22
    2010年4月1日 下午 03:31

所有回覆

  • Hi!

    您可以先跑跑看 MSDN 中的範例程式碼

    ProgressBar 類別

    HOW TO:設定 Windows Form ProgressBar 控制項顯示的值

    下列程式碼範例將使用 ProgressBar 控制項,顯示檔案複製作業的過程。這個範例使用 Minimum 和 Maximum 屬性,指定等於要複製檔案數目的 ProgressBar 的範圍。程式碼也使用 Step 屬性和 PerformStep 方法,在檔案複製時遞增 ProgressBar 的值。這個範例會要求您在 Form 中建立稱為 pBar1 的 ProgressBar 控制項,並建立會執行檔案複製作業的方法,稱為 CopyFile (以傳回布林值 (Boolean) 來表示檔案複製作業是否已順利完成)

    Private Sub CopyWithProgress(ByVal ParamArray filenames As String())
        ' Display the ProgressBar control.
        pBar1.Visible = True
        ' Set Minimum to 1 to represent the first file being copied.
        pBar1.Minimum = 1
        ' Set Maximum to the total number of files to copy.
        pBar1.Maximum = filenames.Length
        ' Set the initial value of the ProgressBar.
        pBar1.Value = 1
        ' Set the Step property to a value of 1 to represent each file being copied.
        pBar1.Step = 1
    
        ' Loop through all files to copy.
        Dim x As Integer
        for x = 1 To filenames.Length - 1
            ' Copy the file and increment the ProgressBar if successful.
            If CopyFile(filenames(x - 1)) = True Then
                ' Perform the increment on the ProgressBar.
                pBar1.PerformStep()
            End If
        Next x
    End Sub
    

    歡迎參觀我的Blog.NET菜鳥自救會
    2010年4月1日 上午 02:26
    版主
  • ProgressBar 是給程式回報處理進度用的,理應要由程式去設定啊。

    以你的案例,若要在 60 秒讓 ProgressBar 跑到 100%,那你可以先設定 ProgressBar 的 MinValue = 0, MaxValue = 60,然後放一個 Timer,每秒觸發一次,然後在觸發的事件常式中設定 ProgressBar 的 Value,記得在設完 ProgressBar.Value 後要做一次 Application.DoEvents()。


    以下為簽名檔,請勿對號入座:
    初學不是問題,但用不正確的態度來問問題,那就是很大的問題。
    請不要藉新手之名行小白之實,否則只會讓更多無辜的新手得不到幫助而已。
    如果不知道什麼是小白,請參閱:何謂小白
    2010年4月1日 上午 03:13
    版主
  • 多謝各位的指導,不過小弟目前遇到一個問題

    我把ProgressBar1放在TIMER1(Interval = 300)下執行,當開始測試時

    會出現Progressbar1會直接顯示100%,我不知道我程式哪裡寫錯了!

    麻煩各位指導小弟一下!謝謝

    If DostateBox1.dostate.Text = "開啟測試中" Then 'ProgressBar顯示條件(測試開始執行)

                Dim TestTime As Integer = CType(txtoptime.Text, Integer) '測試時間

                Me.ProgressBar1.Minimum = 1
                Me.ProgressBar1.Maximum = TestTime
                Me.ProgressBar1.Value = 1
                Me.ProgressBar1.Step = 1

                For i As Integer = 1 To TestTime

                    If i < TestTime Then

                        Me.ProgressBar1.PerformStep()
                        Application.DoEvents()
                    End If

                Next i

            ElseIf DostateBox1.dostate.Text = "水閥測試結束。" Then

                Application.DoEvents()

            End If

     

    2010年4月1日 上午 04:04
  •     Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    
            Me.ProgressBar1.PerformStep()
            'Application.DoEvents()
    
        End Sub
    
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    
            Dim TestTime As Integer = CInt(Me.TextBox1.Text) '測試時間
    
            Me.ProgressBar1.Minimum = 1
            Me.ProgressBar1.Maximum = TestTime
            Me.ProgressBar1.Value = 1
            Me.ProgressBar1.Step = 1
            Me.Timer1.Interval = 1000
            Me.Timer1.Start()     
    
        End Sub

    • 已標示為解答 Lolota Lee 2010年4月8日 上午 02:22
    2010年4月1日 上午 05:17
  • 線上手冊提供的範例,有三種多緒方式跑進度列,你可以去看看該程式碼:

    http://www.google.com.tw/search?hl=zh-TW&source=hp&q=MultiThread+%E7%AF%84%E4%BE%8B+site%3Asocial.msdn.microsoft.com%2FForums%2Fzh-TW%2F&meta=&aq=f


    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    • 已標示為解答 Lolota Lee 2010年4月8日 上午 02:22
    2010年4月1日 下午 03:31