User Tools

Site Tools


k10:k10.5:k10.5.3:start

10.5.3 Stop

The STOP statement stops a program and wakes up the debugger as if there was a breakpoint in the current line. This command interrupts the program - nothing more happens.

10.5.3.1 Stop vs. Breakpoint

STOP is actually only relevant in debugging mode during program testing. Normally you develop programs in the IDE and can set breakpoints there. But there is a small, subtle difference: you can link STOP to a condition, while a breakpoint is firmly attached to a line. For example, if only the last pass in a loop control structure is of interest, you can write in the loop body:

If iCurrentIndex = iLastIndex Then Stop 

The program will be interrupted at most once if iCurrentIndex assumes a very special value in the loop. If, on the other hand, you set a line-bound breakpoint, the program stops in every iteration, which can become annoying.

10.5.3.2 Stop Event

The complex STOP EVENT statement is a stand-alone statement, has no relation to the above-mentioned stop and must be used in an event handler. It tells the interpreter that the (native) event that called the event handler is terminated.

The following three examples demonstrate the use of Stop Event:

Example 1

PUBLIC SUB TextBox1_KeyPress() 
  If Key.Text Not Like "[0-9]" Then STOP EVENT
END ' TextBox1_KeyPress() 
PUBLIC SUB TextBox1_KeyPress() 
 IF Instr("0123456789", Key.Text) = 0 THEN STOP EVENT 
END ' TextBox1_KeyPress() 

These often specified two procedures for the safe entry of digits from the interval[0-9] have the general disadvantage that you have no possibility to delete or correct incorrect entries directly via the keyboard or to navigate in the TextBox! However, it is still possible to mark erroneous numbers or number blocks with the mouse and overwrite them with the correct numbers.

A real alternative - by Charles Guerin and Benoît Minisini - accepts not only the digits 0… 9 as a secure entry, but also the six keys you need for necessary corrections and navigation in the TextBox:

Public Sub CheckInput(sAllowed As String)
  Dim iAllow As Integer = 0
 
  If Key.Code = Key.BackSpace Then iAllow = 1 
  If Key.Code = Key.Delete Then iAllow = 1  
  If Key.Code = Key.Left Then iAllow = 1 
  If Key.Code = Key.Right Then iAllow = 1
  If Key.Code = Key.End Then iAllow = 1 
  If Key.Code = Key.Home Then iAllow = 1
 
  If Key.Text And (InStr(sAllowed, Key.Text) > 0) Then iAllow = 1
 
' If an invalid key is pressed, the _KeyPress event is aborted.
  If iAllow = 0 Then STOP EVENT  
 
End ' CheckInput(sAllowed As String)
 
PUBLIC SUB TextBox1_KeyPress() 
  CheckInput("0123456789")
END ' TextBox1_KeyPress() 

As an extension, you can add the following lines to the procedure CheckInput (…) after' If Key. Code = Key. Home… '. With the Enter or Return key you accept the contents of the TextBox - if there is at least one character - and save it in the variable sInput:

If TextBox1.Text And (Key.Code = Key.Enter Or Key.Code = Key.Return) Then 
   iAllow = 1
   sInput = TextBox1.Text ' Print TextBox1.Text
Endif

Example 2

PUBLIC SUB MyObserver_Show() 
  Message.Info("The main window has already seen the light of the monitor!") 
  STOP EVENT  ' The MyObserver_Show event is canceled
END ' MyObserver_Show() 

Example 3

PUBLIC SUB Form_Close() 
  IF NOT ModulGlobal.AllowClose THEN 
     STOP EVENT ' The window remains open... the Form_Close_Event is canceled.
  ELSE 
     ME.Close 
  ENDIF 
END ' Form_Close() 

Download

Articles

Download


10.5.3 Stop

Die Anweisung STOP stoppt ein Programm und weckt den Debugger, als ob sich ein Haltepunkt in der aktuellen Zeile befinden würde. Dieser Befehl unterbricht das Programm – mehr passiert nicht.

10.5.3.1 Stop vs. Breakpoint

Relevant ist STOP eigentlich nur im Debug-Modus beim Programm-Test. Normalerweise entwickelt man Programme in der IDE und kann dort Breakpoints setzen. Aber es existiert ein kleiner, feiner Unterschied: STOP können Sie an eine Bedingung knüpfen, während ein Breakpoint fest an eine Zeile geknüpft ist. Wenn zum Beispiel in einer Loop-Kontrollstruktur nur der letzte Durchlauf interessiert, dann können Sie im Schleifen-Körper schreiben:

If iCurrentIndex = iLastIndex Then Stop 

Das Programm wird höchstens einmal unterbrochen, wenn iCurrentIndex in der Schleife einen ganz speziellen Wert annimmt. Würden Sie dagegen einen zeilengebundenen Breakpoint setzen, hält das Programm in jeder Iteration an, was nervig werden kann.

10.5.3.2 Stop Event

Die komplexe Anweisung STOP EVENT ist eine eigenständige Anweisung, hat keinen Bezug zu dem o.a. Stop und muss in einem Event-Handler verwendet werden. Sie teilt dem Interpreter mit, dass das (native) Ereignis abgebrochen wird, welches den Event-Handler aufgerufen hatte.

Die folgenden drei Beispiele demonstrieren die Verwendung von Stop Event:

Beispiel 1

PUBLIC SUB TextBox1_KeyPress() 
  If Key.Text Not Like "[0-9]" Then STOP EVENT
END ' TextBox1_KeyPress() 
PUBLIC SUB TextBox1_KeyPress() 
 IF Instr("0123456789", Key.Text) = 0 THEN STOP EVENT 
END ' TextBox1_KeyPress() 

Diese oft angegebenen zwei Prozeduren zur sicheren Eingabe von Ziffern aus dem Intervall [0-9] haben den generellen Nachteil, dass Sie keine Möglichkeiten haben, fehlerhafte Eingaben direkt über die Tastatur zu löschen respektive zu korrigieren oder in der TextBox zu navigieren! Es bleibt jedoch die Möglichkeit, fehlerhafte Ziffern oder Ziffernblöcke mit der Maus zu markieren und mit den korrekten Ziffern zu überschreiben.

Eine echte Alternative – von Charles Guerin und Benoît Minisini – akzeptiert nicht nur die Ziffern 0..9 als sichere Eingabe, sondern auch die sechs Tasten, die Sie für notwendige Korrekturen und zur Navigation in der TextBox benötigen:

Public Sub CheckInput(sAllowed As String)
  Dim iAllow As Integer = 0
 
  If Key.Code = Key.BackSpace Then iAllow = 1 ' 2xLöschen
  If Key.Code = Key.Delete Then iAllow = 1  
  If Key.Code = Key.Left Then iAllow = 1 ' 4xNavigation
  If Key.Code = Key.Right Then iAllow = 1
  If Key.Code = Key.End Then iAllow = 1 ' Ende
  If Key.Code = Key.Home Then iAllow = 1 ' Pos1
 
  If Key.Text And (InStr(sAllowed, Key.Text) > 0) Then iAllow = 1
 
' Wird eine nicht erlaubte Taste gedrückt, dann wird das _KeyPress-Ereignis abgebrochen
  If iAllow = 0 Then STOP EVENT  
 
End ' CheckInput(sAllowed As String)
 
PUBLIC SUB TextBox1_KeyPress() 
  CheckInput("0123456789")
END ' TextBox1_KeyPress() 

Als Erweiterung können Sie nach 'If Key.Code = Key.Home …' noch die folgenden Zeilen in die Prozedur CheckInput(..) einfügen. Mit der Enter- oder Return-Taste übernehmen Sie den Inhalt der TextBox – wenn dort mindestens ein Zeichen vorhanden ist – und speichern ihn in der Variablen sInput:

If TextBox1.Text And (Key.Code = Key.Enter Or Key.Code = Key.Return) Then 
   iAllow = 1
   sInput = TextBox1.Text ' Print TextBox1.Text
Endif

Beispiel 2

PUBLIC SUB MyObserver_Show() 
  Message.Info("Das Hauptfenster hat das Licht des Monitors bereits erblickt!") 
  STOP EVENT  ' Das Ereignis MyObserver_Show wird abgebrochen
END ' MyObserver_Show() 

Beispiel 3

PUBLIC SUB Form_Close() 
  IF NOT ModulGlobal.AllowClose THEN 
     STOP EVENT ' Das Fenster bleibt offen … Das Ereignis Form_Close wird abgebrochen
  ELSE 
     ME.Close 
  ENDIF 
END ' Form_Close() 

Download

Artikel

Download

The website uses a temporary session cookie. This technically necessary cookie is deleted when the browser is closed. You can find information on cookies in our privacy policy.
k10/k10.5/k10.5.3/start.txt · Last modified: 02.07.2018 (external edit)

Page Tools