0

指定した時間からカウントダウンするタイマーを作成しようとしています。

ユーザーは時間を入力してボタンをクリックします。
ボタンをクリックすると、タイマーを含む 2 番目のフォームが開きます。
タイマーが刻むたびに時間が減り、残り時間がform2のテキスト ボックスtextbox.text = timeLeftに表示されます ( )。

ただし、テキストボックスが実際に更新されることはありません。空白のままで、プロパティに新しい値を割り当てること.textが実際に機能するのは、イベントを発生させた場合のみです(たとえば、 textbox.textのプロパティを変更するボタンをクリックします)

※タイマークラスのコードはこちら

Public Class CountdownTimer

Private timeAtStart As Integer
Private timeLeft As Integer

Public Sub StartTimer(ByVal time As Integer)
    timeAtStart = time
    timeLeft = timeAtStart
    Timer1.Enabled = True
End Sub


Private Sub Timer1_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Timer1.Tick

    If timeLeft > 0 Then
        timeLeft = timeLeft - 1
        txtTimeLeft.Text = timeLeft.ToString

    Else
        Timer1.Stop()
        txtTimeRemaining.Text = "Time!"
        txtTimeRemaining.ForeColor = Color.Red
    End If

End Sub

End Class
  • そして、これが私がそれを呼び出す方法です:

    Dim timer As New CountdownTimer
    timer.Show()
    CountdownTimer.StartTimer(CInt(txtSetTime.Text))
    
4

5 に答える 5

2

あなたのコードはインスタンスではなく(フォーム)クラスを呼び出しています.Timer1が独立した再利用可能なクラスに対して適切に参照されている場所がわかりません. 他のフォームで動作する CountDown クラスを実装する 1 つの方法を次に示します。

 Friend Class CountdownTimer

    Private timeAtStart As Integer
    Private timeLeft As Integer
    Private WithEvents Timer1 As New Timer
    Private txtTimeLeft as TextBox

   Public Sub New(TargetTB as TextBox)
       txtTimeLeft= TargetTB
   End Sub


   Public Sub StartTimer(ByVal time As Integer, timeLength as Integer) 
        timeAtStart = time
        timeLeft = timeLength 

        Timer1.Enabled = True
   End Sub


   Private Sub Timer1_Tick(ByVal sender As Object, ByVal e As System.EventArgs)_
            Handles Timer1.Tick

       ' just dislaying time left
       If timeLeft > 0 Then
             timeLeft = timeLeft - 1
             txtTimeLeft.Text = timeLeft.ToString

       Else
           Timer1.Stop()
           txtTimeLeft.Text = "Time!"
           txtTimeLeft.ForeColor = Color.Red
      End If

   End Sub

End Class

それの使い方:

Dim CountDn As New CountdownTimer(frm.TextBoxToUse)

' use the INSTANCE name not the class name!!!!
'CountdownTimer.StartTimer(CInt(txtSetTime.Text))
CountDn.StartTimer(CInt(txtSetTime.Text))
于 2013-10-11T13:53:11.307 に答える
0

更新のたびにテキスト ボックスを更新してみてください。

だから後

txtTimeLeft.Text = timeLeft.ToString

追加

txtTimeLeft.Refresh
于 2013-10-11T14:24:57.223 に答える
0

タイマーが完了した後に結果が表示される場合は、

Application.DoEvents()

更新をすぐに確認する方法。実際には Windows フォームで動作します。何をお試しになりましたか?さらにお手伝いさせていただきます

于 2013-10-11T13:35:58.663 に答える