2016-04-29 9 views
0

Bei der ersten Inspektion vermutete ich, dass dies eine einfache Aufgabe wäre (vielleicht ist es immer noch!), Aber ich habe Schwierigkeiten. Angenommen, ich habe ein Formular mit 1000 Textfeldern, wobei jedes Textfeld zufällig verteilte, in vielen Fällen jedoch passende Zeichenfolgen enthält. Zum Beispiel in einem, wenn die 1000 Textfeldern die folgenden sein kann gefunden:Markieren Sie Sätze von Übereinstimmungen in Textfeld

AAAA-XXXX 
AAAA-XXXX 
BBBB-XXXX 
BBBB-XXXX 
CCCC-XXXX 
CCCC-XXXX 
    ... 

Wie kann ich eine Schleife durch die Textfelder, identifizieren alle die passenden Beispiele und die textbox.backcolor markiert, wo die Spiele stattfinden? Die Hintergrundfarbe sollte für die genauen Übereinstimmungen gleich sein, aber für jeden eindeutigen Satz von Übereinstimmungen unterschiedlich sein. Es könnte bis zu 100 verschiedene Sets geben!

+0

'Für x = 1 bis 1000' mit' Me.Controls ("TextBox" & x) '? –

Antwort

1

gepeitscht tun können nur gemeinsam einen Arbeitstestprojekt, das ist die Art von Ansatz Ich würde. Es vermeidet, dass jede Textbox mit jeder anderen Textbox verglichen wird. Ich habe alles für dich kommentiert :)

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 

Die GenerateColor Funktion muss mehr gedacht, dass es einige schönere Farben erzeugt, aber ich überlasse das Ihnen.

Sie müssen möglicherweise auch eine Zurücksetzung, die jede Box auf die DefaultControl-Farbe oder was auch immer es heißt, und führen Sie das an der Spitze der SetBoxColors.

Matching text colours

+0

Danke für Ihre wundervolle Antwort! Ich habe sehr viel daraus gelernt und es macht fast genau das, wozu ich es brauchte. Ich werde arbeiten, um es meiner Form anzupassen. Vielen Dank! – MalLav

1

du

Dim strText As String 
    For Each TextBox1 As System.Windows.Forms.TextBox In Me.Controls 
     strText = TextBox1.Text 
     For Each TextBox2 As System.Windows.Forms.TextBox In Me.Controls 
      If strText = TextBox2.Text AndAlso TextBox2.Name <> TextBox1.Name Then 
       TextBox2.BackColor = Color.Red ' or whatever you want to use 
       TextBox1.BackColor = Color.Red 
      End If 

     Next 
    Next 
+0

Danke für Ihre Hilfe! Ich habe mich diesem Problem aus einem ähnlichen Blickwinkel genähert - das wird die Spiele richtig identifizieren, aber wie können die Spiele eine einzigartige Farbe erhalten? Bei allen Übereinstimmungen in Ihrem Beispiel wird die Hintergrundfarbe unabhängig von textbox.text festgelegt. Danke noch einmal! – MalLav

Verwandte Themen