Text box van kleur veranderen

Status
Niet open voor verdere reacties.

jordidroj

Gebruiker
Lid geworden
29 okt 2009
Berichten
100
Hey :D

Ten eerste, sorry dat ik geen duidelijke titel heb gebruikt maar ik wist niet wat ik moest plaatsen als titel.

Ik heb TextBox1, TextBox2, TextBox3, TextBox4, TextBox5, TextBox6, TextBox7, TextBox8, TextBox9 en TextBox10.

Nu wil ik dat wanneer de tekst van bijvoorbeeld TextBox2, TextBox3 en TextBox5 het zelfde zijn dat de TextBox.Backcolor dan color.green is.

Zo iets dus:

The TextBoxes that are the same text then
that boxes = backcolor = color.green

Alleen is dit natuurlijk een heeele foute code xD

Alvast bedankt :)

Gr. Jordi
 
Code:
if textBox1.text = textBox2.text And textBox2.text = textBox3.text then
      textBox1.bgColor = colors.green
end if
zoiets?
 
Nee dit is het niet.. :(.. Ik wil echt dat alle TextBox'en waarvan de tekst het zelfde zijn dat die TextBoxen waarvan de tekst het zelfde is de BackColor groen wordt.

Maar is dit wel mogelijk?

Gr. Jordi
 
door al je textboxen heenloopen, en als ze hetzelfde zijn, kleuren!

Ik zelf zou het doen met een control array, maargoed, ik kom nog uit de tijd van vb6; ik weet zeker dat .NET er een erg handige oplossing voor heeft. Je zult evne moeten wachten tot iemand die hier verstand van heeft iets te zeggen heeft.

Kortweg:
Code:
for each textBox on form1 (x)
   if this.text == x.text
      x.bgcolor = green
   end if
next
 
Ik kwam met de volgende methode:

Maak global string variable genaamd HoldText.

Plaats dan de volgende Sub in je codeform:

Code:
            Private Sub TextBox_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles _
    TextBox2.TextChanged, TextBox3.TextChanged, TextBox5.TextChanged

        HoldText = sender.Text

        If TextBox2.Text = HoldText And TextBox3.Text = HoldText And TextBox5.Text = HoldText Then
            TextBox2.BackColor = Color.LightGreen
            TextBox3.BackColor = Color.LightGreen
            TextBox5.BackColor = Color.LightGreen
        Else
            TextBox2.BackColor = SystemColors.Window    'Je kan ook Color.Red hier opgeven om aan te geven dat de text niet
            TextBox3.BackColor = SystemColors.Window    'hetzelfde is, nu springt de backcolor van alle textboxen weer terug
            TextBox5.BackColor = SystemColors.Window    'naar wit (SystemColors.Window) als de text niet hetzelfde is
        End If

    End Sub

Getest en het doet wat je wilt. :)
 
Ik kwam met de volgende methode:

Maak global string variable genaamd HoldText.

Plaats dan de volgende Sub in je codeform:

Code:
            Private Sub TextBox_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles _
    TextBox2.TextChanged, TextBox3.TextChanged, TextBox5.TextChanged

        HoldText = sender.Text

        If TextBox2.Text = HoldText And TextBox3.Text = HoldText And TextBox5.Text = HoldText Then
            TextBox2.BackColor = Color.LightGreen
            TextBox3.BackColor = Color.LightGreen
            TextBox5.BackColor = Color.LightGreen
        Else
            TextBox2.BackColor = SystemColors.Window    'Je kan ook Color.Red hier opgeven om aan te geven dat de text niet
            TextBox3.BackColor = SystemColors.Window    'hetzelfde is, nu springt de backcolor van alle textboxen weer terug
            TextBox5.BackColor = SystemColors.Window    'naar wit (SystemColors.Window) als de text niet hetzelfde is
        End If

    End Sub

Getest en het doet wat je wilt. :)

Hey,

Hij doet het alleen als TextBox2, TextBox3 en TextBox5 het zelfde zijn. Maar ik wil dat als bijvoorbeeld TextBox1, TextBox6, TextBox8 en TextBox9 het zelfde zijn dat zij dan ook op groen springen.
Of als alleen TextBox1 en TextBox2 hetzelfde zijn dat die twee dan alleen op groen springen.

Ik zou wel weten hoe ik dit zou moeten doen maar daar zou ik meer dan 1000 If statements voor nodig hebben..
Vandaar dat ik hier vraag of het op een makkelijkere manier kan.
 
Drommels, je hebt gelijk, ik was alleen maar gefocust op TextBox 2, 3 en 5.

Het wordt op dit manier wel wat lastiger, ik weet niet of het mij gaat lukken.

Edit: Sorry, ik kom er niet uit.
 
Laatst bewerkt:
Hey,

Maakt niet uit hoor. Ik zou er al helemaal niet uitgekomen zijn en in iedergeval tnx dat je wel geprobeerd hebt :)

Maar denk je dat er een manier zou zijn voor dit of zou ik dus echt met al die duizenden if statements moeten gaan werken?

Gr. Jordi
 
Ik weet zeker dat het ook met minder code moet kunnen, misschien door middel van een function ofzo, dat alleen de textboxen returned die dezelfde text bevatten, en die vervolgens groen kleuren. Het probleem is de juiste code uit zien te vissen die dat kan doen.
 
Code:
    Private Sub TextBox1_Validating(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) _
        Handles TextBox1.Validating, TextBox2.Validating, TextBox3.Validating, TextBox4.Validating, TextBox5.Validating, TextBox6.Validating, TextBox7.Validating, TextBox8.Validating
        Dim currentTextBox As TextBox
        currentTextBox = CType(sender, TextBox)
        If (String.IsNullOrEmpty(currentTextBox.Text)) Then Return
        LoopThroughAllTextBoxes(currentTextBox)

    End Sub

    Private Sub CheckValue(ByVal currentTextBox As TextBox, ByVal txtBox As TextBox)
        If currentTextBox.Text.Equals(txtBox.Text) Then
            currentTextBox.BackColor = Color.Green
            txtBox.BackColor = Color.Green
        ElseIf txtBox.BackColor.Equals(Color.Green) Then
            Return
        Else
            currentTextBox.BackColor = SystemColors.Window
            txtBox.BackColor = SystemColors.Window
        End If
    End Sub

    Private Sub LoopThroughAllTextBoxes(ByVal currentTextBox As TextBox)
        Dim txtBox As TextBox
        For Each c As Control In Me.Controls
            txtBox = TryCast(c, TextBox)
            If (txtBox Is Nothing) OrElse (txtBox.Equals(currentTextBox)) Then
                Continue For
            End If

            CheckValue(currentTextBox, txtBox)
        Next

    End Sub

Dit gaat nog niet helemaal lekker, maar de rest moet je zelf even uitproberen.
Het is niet minder code, maar wel een beetje beter onderhoudbaar als er meerdere textboxes bijkomen.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan