在VB.NET中使用计时器的报警应用程序

时间:2015-12-07 03:24:20

标签: vb.net

我试图让声音在指定的时间播放,但无论我尝试什么,我似乎无法让它发挥作用:/

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

    alarmtime = My.Computer.Clock.LocalTime.Date.ToString + " " +
                ComboBox1.Text.ToString + ":" + ComboBox2.Text.ToString + ":" + My.Computer.Clock.LocalTime.Second.ToString + " " +
                My.Computer.Clock.LocalTime.TimeOfDay.ToString

    If My.Computer.Clock.LocalTime.ToString = alarmtime.ToString Then
        If RadioButton1.Checked = True Then
            My.Computer.Audio.Play(Label2.Text.ToString, AudioPlayMode.WaitToComplete)
        End If
    End If

End Sub

2 个答案:

答案 0 :(得分:0)

如果您正在使用日期,那么我建议使用DateTime类而不是纯字符串。

例如

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

    Dim alarmTime As New DateTime()
    alarmTime = alarmTime.AddHours(Convert.ToInt32(ComboBox1.Text))
    alarmTime = alarmTime.AddMinutes(Convert.ToInt32(ComboBox2.Text))

    Dim currentTime As New DateTime()
    currentTime = currentTime.AddHours(My.Computer.Clock.LocalTime.Hour)
    currentTime = currentTime.AddMinutes(My.Computer.Clock.LocalTime.Minute)

    If currentTime.TimeOfDay = alarmTime.TimeOfDay Then
        If RadioButton1.Checked = True Then
            My.Computer.Audio.Play(Label2.Text.ToString, AudioPlayMode.WaitToComplete)
        End If
    End If

End Sub

或者更好的是,只需将计时器间隔设置为alarm时间与LocalTime之间的差异,即可在正确的时间触发。

例如。

添加按钮单击事件以设置您在其中设置计时器间隔的闹钟时间,如下所示:

Dim alarmTime As New DateTime()
alarmTime = alarmTime.AddHours(Convert.ToInt32(ComboBox1.Text))
alarmTime = alarmTime.AddMinutes(Convert.ToInt32(ComboBox2.Text))

Timer1.Interval = alarmTime.TimeOfDay.Subtract(My.Computer.Clock.LocalTime.TimeOfDay).TotalMilliseconds

答案 1 :(得分:0)

我建议以不同的方式列出您的代码,并对您处理数据的方式进行一些更改。

我建议您使用 DateTimePicker 而不是两个文本框,因为这样可以确保您的时间变量以后更容易维护。在设计选项卡中,暂时禁用 Timer1 并将间隔设置为1000毫秒,以免频繁发射以淹没您的计算机,但通常足以让闹钟播放得相当迅速。

在表单设计模式下, DateTimerPicker 将显示始终显示日期,但在运行时,可以更改选择器的格式,以便您只能选择时间。这段代码应该放在你的表单加载事件中,如下所示

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    DateTimePicker1.Format = DateTimePickerFormat.Custom
    DateTimePicker1.CustomFormat = "HH:mm"
End Sub

这段代码应该放在Form的变量声明中,这样我的帖子下面的代码就可以访问了

Dim alarmtime As New DateTime
Dim alarmsound As String = ""
Dim currenttime As New DateTime

计时器事件应该只包含每次要比较本地时间和闹钟时间时运行的代码。我已经将代码设置为 Radiobutton1 CheckChanged 事件中的警报时间。我将在Mo.Note中说明,当我设置当前时间变量时,我已将其格式化为24小时格式,就像 DateTimePicker 一样。当闹钟播放时,我将 Timer1.enabled 设置为 False ,以便闹钟不会在当前时间的整个分钟内继续播放匹配闹钟时间。此子节点的最后一行将闹钟时间重置为00:00。这是因为在下一个sub中更改 alarmtime 的代码只能添加小时和分钟,而不仅仅是将它们设置为一个值(VB.net的特性)。

Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
    currenttime = DateTime.Now.ToString("HH:mm")
    If currenttime.Hour = alarmtime.Hour And currenttime.Minute = alarmtime.Minute Then
        My.Computer.Audio.Play(alarmsound, AudioPlayMode.WaitToComplete)
        Timer1.Enabled = False
        alarmtime = New DateTime
    End If
End Sub

行。下一个。设置闹钟时间闹钟的代码已放置在此处,以便仅在选择 RadioButton1 时才会更改。此外,如果您在程序运行时意外更改 DateTimePicker1 ,则不会更改闹钟时间。就个人而言,我会使用一个复选框而不是2个radiobuttons来启用/禁用警报。但那只是我。所以。检查状态更改时会触发此代码。

如果选中了radiobutton,它会设置闹钟时间 alarmound 并启动计时器。如果没有选中,则计时器被禁用,闹钟时间设置为“00:00”,原因如上所述。

Private Sub RadioButton1_CheckedChanged(sender As Object, e As EventArgs) Handles RadioButton1.CheckedChanged
    If RadioButton1.Checked Then
        alarmsound = Label2.Text
        alarmtime = alarmtime.AddHours(DateTimePicker1.Value.Hour)
        alarmtime = alarmtime.AddMinutes(DateTimePicker1.Value.Minute)
        Timer1.Enabled = True
    Else
        Timer1.Enabled = False
        alarmtime = New DateTime
    End If
End Sub

稍后,如果你想发展一个警报的想法,你可以重新设计闹钟时间作为一个名为Alarm的类,具有Time as DateTime,Enabled as Boolean,AlarmSound as String以及可能自己的计时器等属性,以便你可以有多个警报,而不必添加更多的计时器作为设计时间。此外,您可以包含播放闹钟的代码,暂停闹钟并将其终止。这样您就可以在其他程序中使用它,并在以后添加代码以重复警报等功能