VB2008 時間指定 への返答
投稿で使用できる特殊コードの説明。(別タブで開きます。)
以下の返答は逆順(新しい順)に並んでいます。
投稿者 トマト  (小学生)
投稿日時
2009/8/4 02:46:05
使い方を書くのを忘れてました・・・。
テストしていないので、もしかしたら、エラーがあるかもしれません。
'宣言
Dim WithEvents Timer As DateTimer 'DateTimerクラスは、同じ名前空間にあるとして
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load
'初期化
Timer = New DateTimer(#8/3/2009 6:00:00 PM#) '2009年8月3日 午後6時にセット
End Sub
Private Sub Timer_ItWasTime(ByVal sender As Object, ByVal e As System.EventArgs, ByRef Enabled As Boolean) Handles Timer.ItWasTime
Enabled = False
'ここから下に処理を書く
'設定時間を変えてもう一度スタートするには
'Timer.SettingDateTime = #8/3/2009 7:00:00 PM# '2009年8月3日 午後6時にセット
'Enabled = True
'↑実際に使うにはコメントを外してください。
End Sub
テストしていないので、もしかしたら、エラーがあるかもしれません。
投稿者 トマト  (小学生)
投稿日時
2009/8/3 22:43:50
クラス化してみました。
''' <summary>設定した時間になったことをお知らせします。</summary>
Public Class DateTimer
Inherits System.ComponentModel.Component
Protected Timer As New Timers.Timer(50.0R)
''' <param name="SetingDateTime">設定時刻を指定します。</param>
Public Sub New(ByVal SetingDateTime As Date)
AddHandler Timer.Elapsed, AddressOf TimeCheck
Me.SettingDateTime = SetingDateTime
Timer.Enabled = True
End Sub
''' <summary>設定した時間になった時に発生します。</summary>
''' <param name="Enabled">時間になった時にEnabledプロパティを変更できるように参照型でプロパティを送ります。</param>
Public Event ItWasTime(ByVal sender As Object, ByVal e As EventArgs, ByRef Enabled As Boolean)
Dim _settingDateTime As Date
''' <summary>設定時刻を指定します。</summary>
Public Property SettingDateTime() As Date
Get
Return _settingDateTime
End Get
Set(ByVal value As Date)
_settingDateTime = value
End Set
End Property
Protected Overridable Sub TimeCheck(ByVal sender As Object, ByVal e As Timers.ElapsedEventArgs)
If Now >= SettingDateTime Then
Me.Enabled = False
OnItWasTime(New EventArgs)
End If
End Sub
Protected Overrides Sub Dispose(ByVal disposing As Boolean)
RemoveHandler Timer.Elapsed, AddressOf TimeCheck
MyBase.Dispose(disposing)
End Sub
Protected Overridable Sub OnItWasTime(ByVal e As EventArgs)
RaiseEvent ItWasTime(Me, e, Me.Enabled)
End Sub
Protected Overrides Sub Finalize()
RemoveHandler Timer.Elapsed, AddressOf TimeCheck
MyBase.Finalize()
End Sub
Public Property Enabled() As Boolean
Get
Return Timer.Enabled
End Get
Set(ByVal value As Boolean)
Timer.Enabled = value
End Set
End Property
End Class
投稿者 るきお  (社会人)
投稿日時
2009/8/3 22:25:41
デフォルトさんのサンプルですべてが語られています。
少し補足します。
このサンプルでは時刻の指定はDateTimePickerをフォームに配置してユーザーが入力できるようになっています。DateTimePickerを使用せずプログラムに直接日時を埋め込むこともできます。
指定した時間になっているか監視するためにTimer1を使用しています。
Timer2は点滅の制御のためにあるので、時間監視のためには必要ありません。
Timer1、Timer2はツールバーからTimerフォームに配置すると生成されます。
1つのTimer以外のコントロールに依存せず1日1回17:30に処理を実行する例を書いてみました。
簡単に書けると思ったのですが思ったより考慮すべきことが多いです。
もっと良いやり方ありますか?
一般的にはプログラムで指定した時間になったら処理を実行するようにするには、
そのプログラムは指定した時間になったか監視するために24時間365日起動している必要があり非効率です。
Windowsの機能として指定した時間になったらアプリケーションを起動するというものがあるので、
自分でプログラムして実現するのではなく、このWindowsの機能を使用することが多いです。
この機能の正式な名前はちょっと自信がないのですが普段「タスク」と呼んでいます。
コントロールパネルにあると思います。
少し補足します。
このサンプルでは時刻の指定はDateTimePickerをフォームに配置してユーザーが入力できるようになっています。DateTimePickerを使用せずプログラムに直接日時を埋め込むこともできます。
指定した時間になっているか監視するためにTimer1を使用しています。
Timer2は点滅の制御のためにあるので、時間監視のためには必要ありません。
Timer1、Timer2はツールバーからTimerフォームに配置すると生成されます。
1つのTimer以外のコントロールに依存せず1日1回17:30に処理を実行する例を書いてみました。
簡単に書けると思ったのですが思ったより考慮すべきことが多いです。
'次回処理を行う年・月・日 (起動時はNow、つまり当日)
Dim nextYear As Integer = Now.Year
Dim nextMonth As Integer = Now.Month
Dim nextDay As Integer = Now.Day
'次回処理を行う日時 (ここでは当日の17:30を指定)
Dim dummyTime As New Date(nextYear, nextMonth, nextDay, 17, 30, 0)
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
Dim thisTime As Date = Now
If dummyTime <= thisTime Then
Timer1.Enabled = False
'▼ここに行いたい処理を書く
'▲
'次回処理を行う年月日を更新(次の日をセット)
Dim nextTime As Date = thisTime.AddDays(1)
nextYear = nextTime.Year
nextMonth = nextTime.Month
nextDay = nextTime.Day
'次回処理を行う日時 (ここでは明日の17:30を指定)
dummyTime = New Date(nextYear, nextMonth, nextDay, 17, 30, 0)
Timer1.Enabled = True
End If
End Sub
もっと良いやり方ありますか?
一般的にはプログラムで指定した時間になったら処理を実行するようにするには、
そのプログラムは指定した時間になったか監視するために24時間365日起動している必要があり非効率です。
Windowsの機能として指定した時間になったらアプリケーションを起動するというものがあるので、
自分でプログラムして実現するのではなく、このWindowsの機能を使用することが多いです。
この機能の正式な名前はちょっと自信がないのですが普段「タスク」と呼んでいます。
コントロールパネルにあると思います。
投稿者 デフォルト  (社会人)
投稿日時
2009/8/3 21:41:26
時間をセットして、その時間になったら点滅するようにしました。
参考にしてください
Public Class Form1
Dim pos1 As Boolean = False
Dim pos2 As Boolean = False
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim pos1 As Boolean = False
End Sub
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
If Now >= DateTimePicker1.Value Then
Timer2.Enabled = True
Button1.Enabled = True
Else
Button1.Enabled = False
End If
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Timer1.Enabled = True
DateTimePicker1.Enabled = False
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Timer2.Enabled = False
Timer1.Enabled = False
Button1.Enabled = True
Me.Text = "じこくをセットしてください"
DateTimePicker1.Enabled = True
End Sub
Private Sub Timer2_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer2.Tick
Beep()
If pos1 = False Then
Me.Text = ""
pos1 = True
Else
Me.Text = "おべんきょう おわりです"
pos1 = False
End If
If pos2 = False Then
Button2.BackColor = System.Drawing.Color.Red
pos2 = True
Else
Button2.BackColor = System.Drawing.Color.Yellow
pos2 = False
End If
End Sub
End Class
参考にしてください
Public Class Form1
Dim pos1 As Boolean = False
Dim pos2 As Boolean = False
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim pos1 As Boolean = False
End Sub
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
If Now >= DateTimePicker1.Value Then
Timer2.Enabled = True
Button1.Enabled = True
Else
Button1.Enabled = False
End If
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Timer1.Enabled = True
DateTimePicker1.Enabled = False
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Timer2.Enabled = False
Timer1.Enabled = False
Button1.Enabled = True
Me.Text = "じこくをセットしてください"
DateTimePicker1.Enabled = True
End Sub
Private Sub Timer2_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer2.Tick
Beep()
If pos1 = False Then
Me.Text = ""
pos1 = True
Else
Me.Text = "おべんきょう おわりです"
pos1 = False
End If
If pos2 = False Then
Button2.BackColor = System.Drawing.Color.Red
pos2 = True
Else
Button2.BackColor = System.Drawing.Color.Yellow
pos2 = False
End If
End Sub
End Class
投稿者 ももも  (学生)
投稿日時
2009/8/3 20:30:44
VB初心者のものです
今、時間を指定してその時間になったら、メッセージボックスが起動して、警告が表示される
ようなものを作りたいのですが調べてもコードがわかりません
誰かわかる人がいたら教えてください
今、時間を指定してその時間になったら、メッセージボックスが起動して、警告が表示される
ようなものを作りたいのですが調べてもコードがわかりません
誰かわかる人がいたら教えてください
みなさん、たくさんのご意見をありがとうございました!
皆さんが答えてくれたコードを使用することによって
作ることができました。
また、何か困ったことがある場合にここを利用するかもしれませんが
そのときも、よろしくお願いします!