none
TextBox_Leave wird zweimal ausgelöst

    Frage

  • Hallo alle,

    ich habe auf einer Userform eine Textbox, bei der nach Eingabe eines Wertes gegen eine Datenbank geprüft werden soll, ob andere Werte bereits vorhanden sind.

    Mein Problem dabei ist, dass wenn ich die Textbox mit Tab verlasse, das Leave- Ereignis einmal ausgelöst wird, beim Klick mit der Maus auf eine z.B. Checkbox, das Ereignis jedoch zweimal ausgelöst wird. Das hat dann zur unangenehmen Folge, das das Resultset der ersten Datenbankabfrage noch offen ist, und das Programm somit bei der zweiten Abfrage auf einen Fehler läuft.

    Kann man das abstellen?

    Grüße

      Heiko

    Donnerstag, 15. November 2012 11:08

Antworten

  • Hallo Heiko,

    für solche Aufgaben ist das Validating Ereignis gedacht.

    Unabhängig davon:
    Solche Probleme treten u. a. dann auf wenn man den Fokus im Ereignis ändert (siehe Hinweise beim Ereignis).
    Um den Code beim Mehrfachaufruf nur einmalig aufzurufen, setze zu Beginn eine Variable:

    bool isValidating;
    
    private void theControl_Validating(object sender, CancelEventArgs e)
    {
        if (isValidating)
            return;
            
        isValidating = true
        try
        {
           // ... Tests ...
        }
        finally
        {
            isValidating = false;
        }
    }
    

    Gruß Elmar

    • Als Antwort markiert Heiko Sturm Donnerstag, 15. November 2012 14:18
    Donnerstag, 15. November 2012 11:40

Alle Antworten

  • Hallo Heiko,

    für solche Aufgaben ist das Validating Ereignis gedacht.

    Unabhängig davon:
    Solche Probleme treten u. a. dann auf wenn man den Fokus im Ereignis ändert (siehe Hinweise beim Ereignis).
    Um den Code beim Mehrfachaufruf nur einmalig aufzurufen, setze zu Beginn eine Variable:

    bool isValidating;
    
    private void theControl_Validating(object sender, CancelEventArgs e)
    {
        if (isValidating)
            return;
            
        isValidating = true
        try
        {
           // ... Tests ...
        }
        finally
        {
            isValidating = false;
        }
    }
    

    Gruß Elmar

    • Als Antwort markiert Heiko Sturm Donnerstag, 15. November 2012 14:18
    Donnerstag, 15. November 2012 11:40
  • Hallo Elmar,

    Validating funktioniert wie gewünscht. ABer wo ist jetzt der Unterschied? Der Link gab mir leider keine brauchbare Auskunft.

    Grüße

      Heiko

    Donnerstag, 15. November 2012 14:18
  • Hallo Heiko,

    Validating hat als Ereignis-Argumente CancelEventArgs, d. h. man kann damit das Verlassen des Steuerelements verhindern.
    Auch wenn man das im Einzelfall nicht einsetzt, hat man so eine konsistentere Ereignisbehandlung.

    Gruß Elmar

    Donnerstag, 15. November 2012 15:00