Ereignisse abfangen < BASIC < Programmiersprachen < Praxis < Informatik < Vorhilfe
|
Status: |
(Frage) beantwortet | Datum: | 09:09 Mo 09.10.2017 | Autor: | Diophant |
Hallo,
ich habe in VisualBasic (unter Visual Studio 2017) ein kleines Programm geschrieben, wo etwas nicht so funktioniert, wie ich es gerne hätte. Es handelt sich um ein Windows Forms-Projekt.
Das einzige Fenster besitzt zwei Buttons. Beim Klick auf den ersten Button wird eine Schleife gestartet, die durch einen Klick auf den zweiten Button wieder gestoppt werden soll. Realisiert habe ich das so:
1: | Dim pn_quit As Boolean
| 2: |
| 3: | Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
| 4: | Do
| 5: | 'Hier stehen die Befehle, die in der Schleife abgearbeitet werden sollen.
| 6: | Application.DoEvents()
| 7: | Loop Until pn_quit
| 8: | Me.Close()
| 9: | End Sub
| 10: |
| 11: | Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
| 12: | pn_quit = True
| 13: | End Sub
|
Wenn ich das Programm starte, dann bewirkt der erste Klick auf den Button2 nur, dass dieser den Fokus erhält. Ein weiterer Klick erzielt dann das gewünschte (den Abbruch der Schleife und Schließen des Fensters).
Was könnte ich besser machen, um den Button2 mit einem einzigen Mausklick dazu zu bringen, das zu tun, wozu er vorgesehen ist?
Vielen Dank im Voraus für jede zielführende Idee.
Gruß, Diophant
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 12:39 Mo 09.10.2017 | Autor: | leduart |
Hallo
aktiviere den Button 2 am Ende deer ersten Routine.
Gruß leduart
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 12:50 Mo 09.10.2017 | Autor: | Diophant |
Hallo leduart,
> Hallo
> aktiviere den Button 2 am Ende deer ersten Routine.
> Gruß leduart
Danke!
Vermutlich meinst du mit 'aktivieren' die Methode Select des Button-Objekts. Das funktioniert aber nicht am Ende der Ereignisprozedur des ersten Buttons, sondern nur am Anfang, also vor der Schleife.
Ich habe es gerade probiert und das funktioniert wie gesagt. Es ist nur noch nicht so ganz elegant. Hättest du noch eine andere Idee?
Auf jeden Fall vielen Dank für deinen Tipp!
Gruß, Diophant
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 00:55 Di 10.10.2017 | Autor: | leduart |
Hallo
eigentlich müsste select an deinem Punkt 10 eingefügt funktionieren, durch das erste mal klicke, tust du doch das genau?
Gruß leduart
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 09:05 Di 10.10.2017 | Autor: | Diophant |
Hallo leduart,
> Hallo
> eigentlich müsste select an deinem Punkt 10 eingefügt
> funktionieren,
hm, da war meine Frage ein wenig knapp formuliert. Ich schrieb ja, dass es ein Windows-Forms-Projekt ist, d.h. der ganze Code befindet sich in der Klasse 'Form1'. Somit muss ausführbarer Code in Ereignisprozeduren oder benutzerdefinierten Methoden stehen, aber dazwischen dürfen nur Deklarationen und Kommentare stehen.
> durch das erste mal klicke, tust du > doch das
> genau?
> Gruß leduart
Ja, deswegen funktioniert ja dein Tipp, wenn ich die Select-Methode vor das Me.Close() an den Beginn der Ereignisprozedur Button1_Click (vor der Do-Loop-Schleife) einfüge.
Es passiert dann folgendes: wenn ich den Button 1 klicke startet die Schleife (die ganz nebenbei nach Vollkommenen Zahlen sucht) und gleichzeitig geht der Fokus auf den Button 2. Für ein Programm für den Hausgebrauch tut es das, aber es ist eben kein Verhalten, wie man es von professioneller Software her kennt. Ich kann die nächsten Tage ein wenig Zeit auftreiben und selbst noch nach einer anderen Lösung suchen. Falls ich was finde, werde ich es hier noch mitteilen.
Wenn du oder jemand anders aber noch eine Möglichkeit finden, wie man das ohne den sichtbaren Fokus-Wechsel so hinbekommt, wie man es eben gewohnt ist, wäre ich natürlich über einen entsprechnden Tipp dankbar.
Dir auf jeden Fall schonmal vielen Dank.
Gruß, Diophant
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 10:34 Do 12.10.2017 | Autor: | Diophant |
Hallo leduart nochmals,
wie ich ja schon sagte, habe ich noch ein wenig recherchiert. Nach der Literatur, die mir momentan vorliegt (die ist allerdings nicht sehr vollständig und nicht sehr aktuell) geht das bei Windows-Forms-Projekten nicht anders als von dir geschildert.
Will man es anders haben, muss man es mittels WPF implementieren. Das ist bei mir Zukunftsmusik...
Von daher könnte ein Moderator bitte so nett sein und meine obige Frage auf 'beantwortet' stellen. Vielen Dank im Voraus.
Gruß, Diophant
|
|
|
|