2015-08-07 1 views
2

Я создаю приложение VB.Net, чтобы проверить состояние компьютеров в производственной зоне в режиме реального времени. Я хочу отобразить на мониторе макет области, и если состояние машины равно 1, поставьте его зеленым цветом, если это 2 с красным, и если это что-то еще, то оранжевое. У меня есть следующий код, но он не работает, потому что он говорит, что оператор & не определен для типов Control, который я использую для объявления моего массива меток. Может ли кто-нибудь сказать мне, что я делаю что-то неправильно? (Я новичок в VB.Net)Оператор '&' не определен для типов 'String' и 'Control'

Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick 
       Dim labels() As Control = {Label1, Label2, Label3, Label4, Label5, Label6, Label7, Label8, Label9, Label10, Label11, Label12, Label13, Label14, Label15, Label16, Label17, Label18, Label19, Label20, Label21, Label22, 
        Label23, Label24, Label25, Label26, Label27, Label28, Label29, Label30, Label31, Label32, Label33, Label34, Label35, Label36, Label37, Label38, Label39, Label40, Label41, Label42, Label43, Label44, Label45, Label46, 
        Label47, Label48, Label49, Label50, Label51, Label52, Label53, Label54, Label55, Label56, Label57, Label58, Label59, Label60, Label61, Label62, Label63, Label64, Label65, Label66, Label67, Label68, Label69, Label70, 
        Label71, Label72} 
       Dim estado As Integer 

       Try 
        con.Open() 
        For i = 0 To 71 
         Console.WriteLine(labels(i)) 
         Dim sqlquery = "select IDEstado from Maquinas where IDMaquina = " & labels(i) & "" 
         Dim myCommand As New MySqlCommand() 
         myCommand.Connection = con 
         myCommand.CommandText = sqlquery 
         Dim objReader As MySqlDataReader = myCommand.ExecuteReader 
         If objReader.Read = True Then 
          estado = objReader("IDEstado") 

          If estado = 1 Then 
           labels(i).BackColor = System.Drawing.Color.Green 
          ElseIf estado = 2 Then 
           labels(i).BackColor = System.Drawing.Color.Red 
          Else 
           labels(i).BackColor = System.Drawing.Color.DarkOrange 
          End If 
         End If 
         objReader.Close() 
        Next 
        con.Close() 
       Finally 
       End Try 

      End Sub 
+0

Вы знаете, на какой линии вы получаете ошибку? Возможно, 'Console.WriteLine (метки (i))' нуждается в .ToString или .Text. –

+0

'& labels (i) &" "' <- возможно, это. Вам нужно использовать ярлыки (I) .Text property –

ответ

1

Вы должны использовать Text свойство управления в то время как конкатенации его, как показано ниже еще на ваш публикуемый код, который вы на самом деле пытаетесь объединить строку с управлением и так Ошибка.

Dim sqlquery = "select IDEstado from Maquinas where IDMaquina = " & labels(i).Text & "" 
+0

Большое спасибо Rahul. Он работает – vallete7

+0

Да, это помогло. Еще один вопрос: есть несколько ярлыков, которые не будут зелеными (все машины имеют состояние 1 прямо сейчас), и когда я создаю console.writeline значения, которое получает запрос, те, кто не зеленые, ничего не показывают. Любая причина для этого работает на большинстве лейблов и не в других? – vallete7

+1

Не уверен, что понял ваш вопрос. Было бы лучше, если бы вы опубликовали отдельный вопрос с образцом кода, где у вас возникли проблемы. – Rahul

1

Вы пытаетесь присоединиться к элементу управления Label со строкой в ​​своем sqlquery, вам нужно получить текст с ярлыка, см. Ниже;

Изменить это:

Dim sqlquery = "select IDEstado from Maquinas where IDMaquina = " & labels(i) & "" 

к этому:

Dim sqlquery = "select IDEstado from Maquinas where IDMaquina = " & labels(i).Text & "" 
Смежные вопросы