Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[C#] Problemen enter en leave (masked)textboxen

Pagina: 1
Acties:

  • Erik888
  • Registratie: Augustus 2004
  • Laatst online: 31-10-2023
Goedendag,

Ik heb een probleem met mijn applicatie, ik heb een formulier waarop leden toe te voegen zijn. Om de geboortedatum en lidsindsdatum in te vullen heb ik per datum een textbox(tb) die de datum laat zien als dd-mm-eejj en een masked textbox(mtb) waarin alleen getallen te vullen zijn. Ik heb een event bij de textbox_enter waarbij de tb niet zichtbaar wordt en de mtb wel zichtbaar. De tekst wordt overgenomen en de focus wordt gezet op de mtb. Ik heb ook een event maskedtextbox_leave waarbij de mtb niet zichtbaar wordt en de tb wel zichtbaar. De tekst wordt overgenomen.
Nu het probleem als ik aan het debuggen ben dan zie dat bij het binnenkomen van de geboortedatum de volgende events doorlopen worden:
- het enter-event van de geboortedatum (tb)
- meerdere malen het leave-event van de geboortedatum (mtb)
- het enter-event van de lidsindsdatum (tb)
- meerdere malen het leave-event van de lidsindsdatum (mtb)
Dit zou alleen het eerste event moeten zijn!!!

De tabindex van tb en mtb zijn gelijk, tabstop van mtb staat op false.

Iemand een idee wat hier aan de hand kan zijn?

C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
        private void tbGeboortedatum_Enter(object sender, EventArgs e)
        {
            mtbGeboortedatum.Visible = true;
            mtbGeboortedatum.Text = tbGeboortedatum.Text.Replace("-", "");
            mtbGeboortedatum.Focus();
            tbGeboortedatum.Visible = false;
        }

        private void mtbGeboortedatum_Leave(object sender, EventArgs e)
        {
            if (mtbGeboortedatum.Text.Length == 0 || GeldigeDatum(mtbGeboortedatum.Text))
            {
                tbGeboortedatum.Visible = true;
                tbGeboortedatum.Text = DatumOpgemaakt;
                mtbGeboortedatum.Visible = false;
            }
            else
            {
                buttonPanelLidOpslaan.Enabled = false;
                MessageBox.Show("Dit is geen geldige datum");
                mtbGeboortedatum.Focus();
            }
        }

        private void tbLidSindsDatum_Enter(object sender, EventArgs e)
        {
            mtbLidSindsDatum.Visible = true;
            mtbLidSindsDatum.Text = tbLidSindsDatum.Text.Replace("-", "");
            mtbLidSindsDatum.Focus();
            tbLidSindsDatum.Visible = false;
        }

        private void mtbLidSindsDatum_Leave(object sender, EventArgs e)
        {
            if (mtbLidSindsDatum.Text.Length == 0 || GeldigeDatum(mtbLidSindsDatum.Text))
            {
                tbLidSindsDatum.Visible = true;
                tbLidSindsDatum.Text = DatumOpgemaakt;
                mtbLidSindsDatum.Visible = false;
            }
            else
            {
                buttonPanelLidOpslaan.Enabled = false;
                MessageBox.Show("Dit is geen geldige datum");
                mtbLidSindsDatum.Focus();
            }
        }

        private bool GeldigeDatum(string strDatum)
        {
            GoedeDatum = true;
            strDatum = strDatum.Replace("_", "");
            if (strDatum.ToString().Length < 6)
            {
                GoedeDatum = false;
            }
            else
            {
                string strDatum7Optie2 = "";
                if (strDatum.ToString().Length == 6)
                {
                    strDatum = "0" + strDatum.Substring(0, 1) + "0" + strDatum.Substring(1, 5);
                }
                if (strDatum.ToString().Length == 7)
                {
                    strDatum7Optie2 = strDatum.Substring(0, 2) + "-0" + strDatum.Substring(2, 1) + "-" + strDatum.Substring(3, 4); ;
                    strDatum = "0" + strDatum.Substring(0, 7);
                }
                DatumOpgemaakt = strDatum.Substring(0, 2) + "-" + strDatum.Substring(2, 2) + "-" + strDatum.Substring(4, 4);

                try
                {
                    TeTestenDatum = DateTime.ParseExact(DatumOpgemaakt.ToString(), "dd-MM-yyyy", null);
                    TestDatum = DateTime.Parse(TeTestenDatum.ToString());
                }
                catch (Exception)
                {
                    GoedeDatum = false;
                }

                if (!GoedeDatum && strDatum7Optie2 != "")
                {
                    try
                    {
                        GoedeDatum = true;
                        DatumOpgemaakt = strDatum7Optie2;
                        TeTestenDatum = DateTime.ParseExact(DatumOpgemaakt.ToString(), "dd-MM-yyyy", null);
                        TestDatum = DateTime.Parse(TeTestenDatum.ToString());
                    }
                    catch (Exception)
                    {
                        GoedeDatum = false;
                    }
                }
            }
            return GoedeDatum;
        }

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Wat is de reden dat je zo moeilijk doet met het hiden en weer showen van je text-boxen?

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


  • jvdmeer
  • Registratie: April 2000
  • Laatst online: 15:03
rwb schreef op dinsdag 06 mei 2008 @ 10:14:
Wat is de reden dat je zo moeilijk doet met het hiden en weer showen van je text-boxen?
Waarschijnlijk wil hij gecombineerde functionaliteit. Een textbox waarin een datum wordt afgedwongen, en die buiten het typen om gemaskeerd is met ********.


Volgens mij is e.e.a. makkelijker te realiseren, middels alleen de tb. Eventueel een afgeleidde versie hiervan. Bij OnEnter vervang je de inhoud van de tbv door de datum en evt. het masker "dd-mm-eejj". En bij OnLeave, sla je de waarde in een tijdelijke property op, en wis je het masker "dd-mm-eejj"
vervang je de inhoud van de box met ******.

Dan kan je het af met een box. Dat is wel het duidelijkste.

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
overigens vind ik je GeldigeDatum functie ook enigsinds vreemd.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


  • pedorus
  • Registratie: Januari 2008
  • Niet online
Waarom zou je zelf een soort DateTimePicker gaan maken?

(En daarnaast: Waarom zou je zelf al te veel moeite doen om datums te gaan valideren? Waarom is er een globale variabele DatumOpgemaakt?)

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten