• ベストアンサー

【VB2005】タイマーイベント

フォームに例えば、Labelが仮に3つあります。 タイマーのイベント使って、下記のような条件のコードが 書きたいのですが、Labelをたぶん配列にしてどうこうするのが 理解できてなくて困ってます。 ・手順 (1) ↓タイマー処理(1秒間隔) (2) Label1~Label3までの背景色をすべてシステムカラーにする (3) Label1~Label3のどれかをランダムで、背景色を赤にする (4) また(1)の処理に戻る どうしても判らないのでアドバイスお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

Namespace Q4024574 Class Q4024574A Inherits System.Windows.Forms.Form Private Label1 As System.Windows.Forms.Label Private Label2 As System.Windows.Forms.Label Private Label3 As System.Windows.Forms.Label 'コンソールアプリなどSystem.Windows.Forms名前空間が使えない時は別な方法を考える。 Private Timer1 As System.Windows.Forms.Timer Private Labels As System.Collections.Generic.List(Of System.Windows.Forms.Label) Private Random As System.Random Sub New() Random = New System.Random() Me.Size = New System.Drawing.Size(800,600) Label1 = New System.Windows.Forms.Label() Label1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle Label1.Text = "Label1" Label1.AutoSize = False Label1.Top = 50 Label1.Left = 100 Label1.Size = New System.Drawing.Size(400,50) Label2 = New System.Windows.Forms.Label() Label2.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle Label2.Text = "Label2" Label2.AutoSize = false Label2.Top = 150 Label2.Left = 100 Label2.Size = New System.Drawing.Size(400,50) Label3 = New System.Windows.Forms.Label() Label3.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle Label3.Text = "Label3" Label3.AutoSize = false Label3.Top = 250 Label3.Left = 100 Label3.Size = New System.Drawing.Size(400,50) Labels = New System.Collections.Generic.List(Of System.Windows.Forms.Label) Labels.AddRange(New System.Windows.Forms.Label(){Label1,Label2,Label3}) Timer1 = New System.Windows.Forms.Timer Timer1.Interval = 1000 AddHandler Timer1.Tick , AddressOf ChangeColor Me.Controls.AddRange(New System.Windows.Forms.Control(){Label1,Label2,Label3}) Timer1.Enabled = True End Sub Sub ChangeColor() For Each Label As System.Windows.Forms.Label In Labels Label.BackColor = System.Drawing.SystemColors.Control Next Dim x As Integer x = Random.Next(0,3) '何も考えずにやっているので連続した2回同じものが選ばれることもある。 Labels.Item(x).BackColor = System.Drawing.Color.Red End Sub Shared Sub Main(hoge As String()) Dim Form1 As Q4024574A Form1 = New Q4024574A() Form1.ShowDialog() End Sub End Class End Namespace 'こんな感じ?

dizzdive
質問者

お礼

目的に近いコードだと感じました。 忙しい中、ありがとうございます。

その他の回答 (1)

  • kikujack
  • ベストアンサー率47% (17/36)
回答No.2

まず、Label1、Label2、Label3とTimer1をフォームに増加します。 Timer1のTimer1_Tickイベントのコードは: Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick Dim i As Integer Randomize() i = Int(Rnd() * 3 + 1) Label1.BackColor = System.Drawing.SystemColors.Control Label2.BackColor = System.Drawing.SystemColors.Control Label3.BackColor = System.Drawing.SystemColors.Control Select Case i Case 1 Label1.BackColor = Color.Red Case 2 Label2.BackColor = Color.Red Case 3 Label3.BackColor = Color.Red End Select End Sub

dizzdive
質問者

お礼

シンプルで判りやすいのですが、 Labelコントロールを、配列にしてどうこうするのが抜けている感じがしたので、抜けていなければ申し訳ない。

関連するQ&A