2016-07-20 2 views
1

Я оглядывался, и я не видел никого с этой проблемой, и мне нужна помощь. Я работаю над сигнальным экраном с несколькими кнопками, которые показывают состояние, в котором каждый сигнал тревоги находится в цвете. Я постоянно проверяю состояние с помощью таймера, который смотрит на массив входящих данных из ПЛК. Когда я запускаю код, только первая кнопка меняет цвет, никто из других ничего не делает. Я не уверен, что мне делать. Вот пример того, что я делаюVB только один Если оператор работает во таймере

 Private Sub AlarmInformation_Load(sender As Object, e As EventArgs) Handles Me.Load 

    Timer1.Enabled = True 
    Timer1.Interval = 2000 
End Sub 

Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick 
    'Alarm0 
    If MainForm.inputDataReals(MainForm.AOEnumArray.Alarm0) = 0 Then 
     Button1.BackColor = Color.ForestGreen 
    ElseIf MainForm.inputDataReals(MainForm.AOEnumArray.Alarm0) = 2 Then 
     Button1.BackColor = Color.Red 
    ElseIf MainForm.inputDataReals(MainForm.AOEnumArray.Alarm0) = 3 Then 
     Button1.BackColor = Color.Yellow 
    ElseIf MainForm.inputDataReals(MainForm.AOEnumArray.Alarm0) = 4 Then 
     Button1.BackColor = Color.Gray 
    End If 
    'Alarm1 
    If MainForm.inputDataReals(MainForm.AOEnumArray.Alarm1) = 0 Then 
     Button1.BackColor = Color.ForestGreen 
    ElseIf MainForm.inputDataReals(MainForm.AOEnumArray.Alarm1) = 2 Then 
     Button1.BackColor = Color.Red 
    ElseIf MainForm.inputDataReals(MainForm.AOEnumArray.Alarm1) = 3 Then 
     Button1.BackColor = Color.Yellow 
    ElseIf MainForm.inputDataReals(MainForm.AOEnumArray.Alarm1) = 4 Then 
     Button1.BackColor = Color.Gray 
    End If 
    'Alarm2 
    If MainForm.inputDataReals(MainForm.AOEnumArray.Alarm2) = 0 Then 
     Button1.BackColor = Color.ForestGreen 
    ElseIf MainForm.inputDataReals(MainForm.AOEnumArray.Alarm2) = 2 Then 
     Button1.BackColor = Color.Red 
    ElseIf MainForm.inputDataReals(MainForm.AOEnumArray.Alarm2) = 3 Then 
     Button1.BackColor = Color.Yellow 
    ElseIf MainForm.inputDataReals(MainForm.AOEnumArray.Alarm2) = 4 Then 
     Button1.BackColor = Color.Gray 
    End If 
    'Alarm3 
    If MainForm.inputDataReals(MainForm.AOEnumArray.Alarm3) = 0 Then 
     Button1.BackColor = Color.ForestGreen 
    ElseIf MainForm.inputDataReals(MainForm.AOEnumArray.Alarm3) = 2 Then 
     Button1.BackColor = Color.Red 
    ElseIf MainForm.inputDataReals(MainForm.AOEnumArray.Alarm3) = 3 Then 
     Button1.BackColor = Color.Yellow 
    ElseIf MainForm.inputDataReals(MainForm.AOEnumArray.Alarm3) = 4 Then 
     Button1.BackColor = Color.Gray 
    End If 
    'Alarm4 
    If MainForm.inputDataReals(MainForm.AOEnumArray.Alarm4) = 0 Then 
     Button1.BackColor = Color.ForestGreen 
    ElseIf MainForm.inputDataReals(MainForm.AOEnumArray.Alarm4) = 2 Then 
     Button1.BackColor = Color.Red 
    ElseIf MainForm.inputDataReals(MainForm.AOEnumArray.Alarm4) = 3 Then 
     Button1.BackColor = Color.Yellow 
    ElseIf MainForm.inputDataReals(MainForm.AOEnumArray.Alarm4) = 4 Then 
     Button1.BackColor = Color.Gray 
    End If 

Любая помощь была бы принята с благодарностью. Заранее спасибо.

+2

Вы ссылаетесь только на одну кнопку ('Button1'), поэтому предположительно это та, которая меняет цвет. – TZHX

+0

oh man Я этого не понимал, когда справлялся с моим рабочим кодом. Это, наверное, проблема. Я сделаю изменения и вернусь к вам. – Fuzydragon

+0

Вот в чем проблема. Спасибо за дополнительный набор глаз. – Fuzydragon

ответ

0

Для этой цели можно использовать dictionary, чтобы исключить дополнительные заявления if.

Вот некоторые примеры кода, которые вы могли бы использовать:

Dim openWith As New Dictionary(Of Integer, Color) 

    ' Add some elements to the dictionary. There are no 
    ' duplicate keys, but some of the values are duplicates. 
    openWith.Add(0, Color.ForestGray) 
    openWith.Add(2, Color.Red) 
    '... and so on. 
    'Accessing the colors: 
    openWith(MainForm.inputDataReals(MainForm.AOEnumArray.Alarm0)) 

Это будет выплюнуть цвет, связанный с номером. Каждый блок из 4 else/ifs уменьшается до одной строки. Вы даже можете сделать словари произвольных ключей, чтобы у вас были кнопки и сигналы, связанные друг с другом.

+0

Большое спасибо за подсказку. Чем сложнее код, тем лучше – Fuzydragon

Смежные вопросы