Textbox_Leave probleem

Status
Niet open voor verdere reacties.

nicolasmertens

Nieuwe gebruiker
Lid geworden
6 okt 2012
Berichten
2
Hallo,

Ik loop tegen een opmaak probleem aan in een oefening op school.
Ik wil bij het verlaten van het 2de wachtwoord veld een controle uitvoeren of het wachtwoord overeenstemt met het 1ste wachtwoord veld.

Het probleem ligt hem in de opmaak van een bijhorend label. Die wil ik laten veranderen naar "Opnieuw ingeven". Dat lukt zonder probleem bij het eerste veld. Bij het tweede doet hij het niet correct.

Wat doe ik fout?

Code:
// WACHTWOORD CODE
        //triggert bij het verlaten van paswoord2 (paswoord bevestiging) de code om de wachtwoorden te vergelijken.
        //www.codeproject.com/Questions/363958/how-to-compare-two-text-boxes-in-csharp-net 

        private void txtbxBevestigWachtwoord_Leave(object sender, EventArgs e)
        {
            if (!IsPasswordsEqual(txtbxWachtwoord.Text, txtbxBevestigWachtwoord.Text))      //het uitroepteken geeft het omgekeerde vd functie aan
            {
                MessageBox.Show("Uw wachtwoord werd foutief bevestigd. Gelieve opnieuw uw wachtwoord in te geven.", "FOUT: Wachtwoord bevestiging", MessageBoxButtons.OK, MessageBoxIcon.Error);
                txtbxWachtwoord.ResetText();
                lblAsterixWachtwoord.Text = "* Opnieuw ingeven";
                txtbxBevestigWachtwoord.ResetText();
                lblAsterixBevestigWachtwoord.Text = "* Opnieuw ingeven";
                txtbxWachtwoord.Focus();
            }

            // FOUT!!!! waarom neemt die de nieuwe opmaak niet mee bij het verlaten, zelfde fout als met de else functie

            if (IsPasswordsEqual(txtbxWachtwoord.Text, txtbxBevestigWachtwoord.Text))           //Wanneer het wachtwoord goed is.
            {
                lblAsterixBevestigWachtwoord.Text = "* alleen bij verlaten en juist";
            }

// ERROR WAAROM !!!!!!!!!
/Hij blijft die 1 weergeven en bekijkt het dus duidelijk niet als een OF/ANDERS structuur want hij doorloopt gewoon alles
//else 
//{
//lblAsterixBevestigWachtwoord.Text = "1"; //terugzetten oorspronkelijke staat na afronding tweede maal ingeven wachtwoord, want immers ditmaal correct.  
//}
        
        }

        private void txtbxWachtwoord_Leave(object sender, EventArgs e)
        {
            lblAsterixWachtwoord.Text = "*";     //terugzetten oorspronkelijke staat na afronding tweede maal ingeven wachtwoord, ditmaal correct.  
        }



        //algemene code om twee velden te vergelijken.Dit geval benoemd als paswoorden om overzicht te bewaren maar kan ook algemene benamingen krijgen.
        //www.codeproject.com/Questions/363958/how-to-compare-two-text-boxes-in-csharp-net 


        public bool IsPasswordsEqual(string password1, string password2)
        {
            if (password1.Equals(password2))
            {
                return true;
            }

            return false;
        }

// EINDE WACHTWOORD CODE

Screen Shot 2012-10-06 at 03.17.22.png
Screen Shot 2012-10-06 at 03.18.01.png
Screen Shot 2012-10-06 at 03.18.17.jpg
Screen Shot 2012-10-06 at 03.18.24.png >> hier situeert het probleem
Screen Shot 2012-10-06 at 03.18.38.png
Bij de voorlaatste screenshots zie je dat het fout gaat. Voorlaatst zijn de velden terug leeg en zou bij beiden erboven "Opnieuw ingeven" moeten staan.
Daar kiest hij dus expliciet voor de verkeerde.
 
Kijk naar de constructie van je if statement.
Wat er in jou situatie gebeurt is dat je de text velden reset, waardoor ze leeg zijn. Vervolgens ga je naar het eerste wachtwoord tekstveld ( waardoor er dus weer een leave uitgevoerd wordt ) en aangezien allebei de velden leeg zijn, is het wachtwoord juist.

Aantal tips:
* Controleer of de tekst velden wel gevuld zijn
* Maak gebruik van een if else constructie.

Ik prefereer de validating en de validated boven de leave functie, misschien moet je daar ook eens een kijkje innemen, daarin vind ik dit soort constructie nauwkeuriger voor.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan