を行うことができます。これは、すべてのテキストボックスを他のすべてのテキストボックスと比較することを避けます。私はあなたのためにすべてをコメントしました:)
Private Sub SetBoxColors()
'The keys are textbox texts, the values are the number of times it occurs
Dim UniqueTextsAndUsage As New Dictionary(Of String, Integer)
Dim FirstInstanceTextBoxes As New List(Of TextBox)
'The keys are textbox texts, the values are the colour for the box
Dim UniqueColors As New Dictionary(Of String, System.Drawing.Color)
'Iterate over all the text boxes
' Substitute Me for your Form instance if necessary
For Each TBox As Control In Me.Controls
'Skip things that aren't textboxes
If Not TypeOf TBox Is TextBox Then
Continue For
End If
'If we have seen this textbox text before
If UniqueTextsAndUsage.ContainsKey(TBox.Text) Then
'Increase the usage
UniqueTextsAndUsage(TBox.Text) += 1
If UniqueTextsAndUsage(TBox.Text) = 2 Then
'This is the second usage, generate a colour for this set of boxes
UniqueColors.Add(TBox.Text, GenerateColor(UniqueColors.Count + 1))
End If
'Colour this textbox
' (it won't get the first instance of each unique string)
TBox.BackColor = UniqueColors(TBox.Text)
Else
'We have NOT seen this textbox text before
'Add the first occurence of the text
UniqueTextsAndUsage.Add(TBox.Text, 1)
'Mark this textbox as one we may have to colour later
FirstInstanceTextBoxes.Add(TBox)
End If
Next
'Colour all the first instances
For Each TBox As TextBox In FirstInstanceTextBoxes
'Check there are sufficient uses of this text
If UniqueTextsAndUsage(TBox.Text) > 1 Then
TBox.BackColor = UniqueColors(TBox.Text)
End If
Next
End Sub
Private Function GenerateColor(Id As Integer) As System.Drawing.Color
'Needs more thought - often too dark
Dim KnownColourByIdNumber As System.Drawing.KnownColor = Id
Return System.Drawing.Color.FromKnownColor(KnownColourByIdNumber)
End Function
それはいくつかのよりよい色を生成しますが、私はあなたにあることを残すようにGenerateColor機能をより考えなければなりません。
また、すべてのボックスをDefaultControlの色またはそれが呼び出されたものに設定し、SetBoxColorsの上部でそれを実行するリセットが必要な場合もあります。
'Me.Controls( "テキストボックス" &X)'と1000 'からx = 1の場合? –