ABOUT Visual Basic Programmieren Programmierung Download Downloads Tips & Tricks Tipps & Tricks Know-How Praxis VB VBA Visual Basic for Applications VBS VBScript Scripting Windows ActiveX COM OLE API ComputerPC Microsoft Office Microsoft Office 97 Office 2000 Access Word Winword Excel Outlook Addins ASP Active Server Pages COMAddIns ActiveX-Controls OCX UserControl UserDocument Komponenten DLL EXE
Diese Seite wurde zuletzt aktualisiert am 10.01.2000

Diese Seite wurde zuletzt aktualisiert am 10.01.2000
Aktuell im ABOUT Visual Basic-MagazinGrundlagenwissen und TechnologienKnow How, Tipps und Tricks rund um Visual BasicActiveX-Komponenten, Controls, Klassen und mehr...AddIns für die Visual Basic-IDE und die VBA-IDEVBA-Programmierung in MS-Office und anderen AnwendungenScripting-Praxis für den Windows Scripting Host und das Scripting-ControlTools, Komponenten und Dienstleistungen des MarktesRessourcen für Programmierer (Bücher, Job-Börse)Dies&Das...

Themen und Stichwörter im ABOUT Visual Basic-Magazin
Code, Beispiele, Komponenten, Tools im Überblick, Shareware, Freeware
Ihre Service-Seite, Termine, Job-Börse
Melden Sie sich an, um in den vollen Genuss des ABOUT Visual Basic-Magazins zu kommen!
Informationen zum ABOUT Visual Basic-Magazin, Kontakt und Impressum

Zurück...

Zurück...


Anzeige

(-hg) mailto:hg_inproc@aboutvb.de

Mitunter kann es vorkommen, dass bei Operationen innerhalb einer Ereignisprozedur eben dieses Ereignis erneut ausgelöst wird. Wenn Sie zum Beispiel im Click-Ereignis einer ListBox die Eigenschaft ListIndex neu setzen, wird das Click-Ereignis erneut ausgelöst und der Code darin erneut ausgeführt, obwohl der erste Durchlauf noch gar nicht abgeschlossen ist. Im folgenden Beispiel wird das Click-Ereignis erneut ausgelöst, wenn beim ersten Auslösen des Ereignisses der ListIndex einen anderen Wert als 0 hatte:

Private Sub List1_Click()
  List1.ListIndex = 0
End Sub

Sie brauchen also eine Möglichkeit, den erneuten Eintritt in die Click-Ereignisprozedur zu erkennen und abzufangen. Am besten geht dies mit einer statischen Variable in der Prozedur. Statische Variablen in einer Prozedur behalten nämlich ihren Wert auch über das Ende der Abarbeitung einer Prozedur hinaus. Einfach dimensionierte Variablen hingegen verlieren ihren Wert und sind beim nächsten Eintritt wieder mit ihrem Standardwert initialisiert.

Zu Beginn der Prozedur prüfen Sie, ob diese statische Sperrvariable, geben wir ihr den Datentyp Boolean und nennen sie InProc, gesetzt (= True) oder nicht gesetzt (= False) ist. Ist sie gesetzt, wird die Prozedur sogleich wieder verlassen, ohne dass der übrige Code darin ausgeführt würde. Ist sie nicht gesetzt, wird sie gesetzt. Ist die aktuelle Abarbeitung der Prozedur abgeschlossen, wird die Sperrvariable wieder zurückgesetzt (= False), damit beim nächsten regulär ausgelösten Ereignis die Prozedur wieder normal und vollständig abgearbeitet wird.

Das Rücksetzen ist absolut wichtig! Denn sollten Sie dies vergessen, würde die Prozedur nie mehr regulär abgearbeitet!

Private Sub List1_Click()
  Static InProc As Boolean

  If InProc Then
    Exit Sub
  Else
    InProc = True
  End If
  List1.ListIndex = 0
  '... weiterer Code
  InProc = False
End Sub

Mit der statischen Sperrvariablen InProc verhindern Sie, dass eine Prozedur vorzeitig erneut abgearbeitet wird

Natürlich können Sie diese Technik in jeder beliebigen Prozedur, ob Sub oder Function usw., verwenden, um einen innerhalb der Prozedur hervorgerufenen Wiedereintritt vorübergehend zu verhindern.


Beispielprojekt InProcTest (inproc.zip - ca. 1,7 KB)






Themen - Allgemeines
Themen - Entwicklungsumgebung (VB-IDE)
Themen - Forms
Themen - Steuerelemente (Controls)
Themen - Grafik
Themen - Dateien
Themen - UserControls
Themen - Einsteiger-Tipps
Themen - Wussten Sie...?

Übersicht nach Titeln in alphabetischer Reihenfolge
Übersicht nach Erscheinungsdatum

Schnellsuche



Zum Seitenanfang

Copyright © 1999 - 2017 Harald M. Genauck, ip-pro gmbh  /  Impressum

Zum Seitenanfang

Zurück...

Zurück...

Download Internet Explorer