2022/07/08(Fri) 16:59:28 編集(投稿者)
■No100176 (初心者HK さん) に返信
解決して良かったです。
ところでコーディングについて2つほど指摘させてください。
(1) メソッドを分けて見通しよく
ラベルや RectangleShape の色を変えたり、音を鳴らす部分は別のメソッドにしたほうがいいかと思います。
Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
IRet = AxActUtlType1.Open()
If IRet <> 0 Then Return
Try
IRet = AxActUtlType1.ReadDeviceBlock("X20", 1, DataX(0))
If IRet <> 0 Then
Return ' ここで抜けても Finally ブロックで Close が実行される
End If
SetControls()
Finally
AxActUtlType1.Close()
End Try
End Sub
のようにして、Sub SetControls の中に書きます。
(2) 同じような繰り返し処理はまとめる
Beep 音を鳴らす、フラグをゼロクリアする、色を変えるという一連の処理はまとめることが出来そうです。
Private Sub SetRepeat(index As Integer, ByRef flg As Integer, shape As RectangleShape, label As Label)
If Mid(XtoSt, index, 1) = "1" Then
If flg = 0 AndAlso index <> 8 Then ' index が 8 のときは音を鳴らさない
Console.Beep(1500, 1000)
End If
shape.BackColor = Color.Red
label.BackColor = Color.Red
Else
flg = 0
shape.BackColor = SystemColors.GradientInactiveCaption
label.BackColor = SystemColors.GradientInactiveCaption
End If
End Sub
これを、先ほどの SetControls の中から呼び出します。
(flg6 もコメントアウトを解除します。)
Private Sub SetControls()
'DataX(0)16進数を2進数に変換
X16to2 = Convert.ToString(DataX(0), 2)
XtoSt = Format(X16to2, "0000000000000000")
TextBox1.Text = XtoSt 'テスト用
SetRepeat(13, flg1, RectangleShape1, Label1)
SetRepeat(12, flg2, RectangleShape2, Label2)
SetRepeat(11, flg3, RectangleShape3, Label3)
SetRepeat(10, flg4, RectangleShape4, Label4)
SetRepeat(9, flg5, RectangleShape5, Label5)
SetRepeat(8, flg6, RectangleShape6, Label6)
End Sub