2016-11-23 12 views
0

私のプログラムでは、いくつかのラベルを作成する必要があります。 ラベルの数は、設定ファイルの数に大きく依存します。簡単に動力学的に作成されたラベル

ラベルは、どのような種類のPLCモジュールがロードされ、どのくらいの数になっているかに基づいています。各PLCモジュール(入力モジュール)には、異なるI/Oアドレスがあります。ここでの唯一の定数は、各I/Oアドレスが1ワード長(16ビット)であることです。 Iを作成する必要がラベルより4つのワードである64入力モジュールをロードした場合、例えば

は、次のとおり

  • 0.00 ... 0.15
  • 1.00 ... 1.15
  • 2.00 ... 2.15
  • 3.00 ... 3.15

各ラベルのような名前を取得します。

OnOff_000 ... OnOff_015など。

しかし、私にとっては厄介な部分があります。各ラベルはデフォルトのbackcolor = color.lightblueで初期化されています。 入力状態の緑(ON)と赤(OFF)に応じて、各ラベルのバックカラーを変更する必要があります。

私は次のコードで1つのラベルの背景色を変更するために管理している

Dim test As Label = CType(IO_ScanPanel.Controls("OnOff_000"), Label) 
     test.BackColor = Color.Red 

しかし、どのように私は、ラベルは次のコードを使用して作成されている他のすべてのラベル

で簡単にこれを行うことができます。

Private Function InsertControls_InputsLabels(ByVal StartAdrs As Integer, ByVal EndAdrs As Integer, ByVal LocX As Integer, ByVal LocY As Integer) As String() 
    Dim NumberOfElements As Integer = 0 
    Dim Coordinates(1) As String 

    Do Until StartAdrs > EndAdrs 

     Do Until NumberOfElements > 15 
      Dim On_OffInput As Label = New Label() 

      On_OffInput.AutoSize = False 
      On_OffInput.Size = New Size(36, 15) 
      On_OffInput.TextAlign = ContentAlignment.MiddleCenter 
      On_OffInput.Location = New Point(LocX, LocY) 
      If NumberOfElements < 10 Then 
       On_OffInput.Text = StartAdrs & ".0" & NumberOfElements 
       On_OffInput.Name = "OnOff_" & StartAdrs & "0" & NumberOfElements 
      Else 
       On_OffInput.Text = StartAdrs & "." & NumberOfElements 
       On_OffInput.Name = "OnOff_" & StartAdrs & NumberOfElements 
      End If 

      On_OffInput.BorderStyle = BorderStyle.Fixed3D 
      On_OffInput.BackColor = Color.LightBlue 

      IO_ScanPanel.Controls.Add(On_OffInput) 

      LocX = LocX + 32 
      NumberOfElements = NumberOfElements + 1 



     Loop 
     NumberOfElements = 0 
     LocY = LocY + 25 
     LocX = 7 
     StartAdrs = StartAdrs + 1 

    Loop 

    Coordinates(0) = LocX 
    Coordinates(1) = LocY 

    Return Coordinates 

End Function 

誰かがこの問題を私に助けてくれることを願っています。

ありがとうございます。

+2

ホールドリストまたは多分キーがそれらの一つのようなものである辞書に格納することで、それらを参照するにアドレス – Plutonix

答えて

0

あなたはすべてのラベルのBackColorプロパティを変更したい場合は、次のように、フォームのコントロールコレクションを反復処理することができます。

For Each myControl As Control In Me.Controls 
    If TypeOf(myControl) Is Label Then myControl.BackColor = Color.Red 
Next 

@Plutonixの提案も良いものです。次のように、各ラベルをフォームレベルスコープのリストに追加します。 Option Strict Onでコーディングすることを推奨し、暗黙的な型キャスティングを避けることもできます。私はこれに基づいていくつかの変更を加えました。次のように

Private myLabels As New List(Of Label) 

Private Function InsertControls_InputsLabels(ByVal StartAdrs As Integer, ByVal EndAdrs As Integer, ByVal LocX As Integer, ByVal LocY As Integer) As Integer() 
    Dim NumberOfElements As Integer 
    Dim Coordinates(1) As Integer 

    Do Until StartAdrs > EndAdrs 
     Do Until NumberOfElements > 15 
      Dim On_OffInput As New Label 

      On_OffInput.AutoSize = False 
      On_OffInput.Size = New Size(36, 15) 
      On_OffInput.TextAlign = ContentAlignment.MiddleCenter 
      On_OffInput.Location = New Point(LocX, LocY) 

      If NumberOfElements < 10 Then 
       On_OffInput.Text = StartAdrs & ".0" & NumberOfElements 
       On_OffInput.Name = "OnOff_" & StartAdrs & "0" & NumberOfElements 
      Else 
       On_OffInput.Text = StartAdrs & "." & NumberOfElements 
       On_OffInput.Name = "OnOff_" & StartAdrs & NumberOfElements 
      End If 

      On_OffInput.BorderStyle = BorderStyle.Fixed3D 
      On_OffInput.BackColor = Color.LightBlue 

      Me.Controls.Add(On_OffInput) 
      myLabels.Add(On_OffInput) 
      LocX = LocX + 32 
      NumberOfElements = NumberOfElements + 1 
     Loop 

     NumberOfElements = 0 
     LocY = LocY + 25 
     LocX = 7 
     StartAdrs = StartAdrs + 1 
    Loop 

    Coordinates(0) = LocX 
    Coordinates(1) = LocY 

    Return Coordinates 
End Function 

ラベルBackColorプロパティは、更新することができます。

For Each myLabel As Label In myLabels 
    myLabel.BackColor = Color.Red 
Next 
関連する問題