Location: Cologne, Germany
Occupation: Second Vice President of Distributed Junk and Trash Development
OK- und Cancel-Button eines Dialoges
Moinsen,
ich habe einen Dialog gebastelt. Auf diesem Dialog befindet sich ein OK- und ein Cancel-Button.
Nun möchte ich mit der Taste <Return> den OK-Button und mit <ESC> den Cancel-Button 'auslösen'.
Wenn ich mich richtig erinnere, dann gab es unter VB6 die Möglichkeit, das Keypress-Event der Form abzufragen und entsprechend zu reagieren. Allerdings wird das Keypress-Event nur dann gefeuert, wenn die Form den Focus hat. Eine (VB6-)KeyPreview-Eigenschaft (also, dass die Form in jedem Fall als erstes das Keypress-Event bekommt; unabhängig, welches Control den Focus besitzt) habe ich in Jabaco nicht gefunden.
Was tun?
Danke im voraus & Grüße ... Peter
ich habe einen Dialog gebastelt. Auf diesem Dialog befindet sich ein OK- und ein Cancel-Button.
Nun möchte ich mit der Taste <Return> den OK-Button und mit <ESC> den Cancel-Button 'auslösen'.
Wenn ich mich richtig erinnere, dann gab es unter VB6 die Möglichkeit, das Keypress-Event der Form abzufragen und entsprechend zu reagieren. Allerdings wird das Keypress-Event nur dann gefeuert, wenn die Form den Focus hat. Eine (VB6-)KeyPreview-Eigenschaft (also, dass die Form in jedem Fall als erstes das Keypress-Event bekommt; unabhängig, welches Control den Focus besitzt) habe ich in Jabaco nicht gefunden.
Was tun?
Danke im voraus & Grüße ... Peter
Hallo,
Das ist in VB6 sogar noch einfacher. CommandButton haben für diesen Zweck die Properties
Default und Cancel
Bsp:
OK-Button: Default = True
Cancel-Button: Cancel=True
Idee für Lösung:
* im Form/Dialog das Interface java#awt#Event#KeyListener implementieren
* das Form/Dialog mit AddKeyEventListener auf alle Controls adden.
dann hast Du ein einziges KeyPressed-Event für alle Controls gleichzeitig
habs allerdings jetzt noch nicht probiert.
Gruß
OlimilO
Das ist in VB6 sogar noch einfacher. CommandButton haben für diesen Zweck die Properties
Default und Cancel
Bsp:
OK-Button: Default = True
Cancel-Button: Cancel=True
Idee für Lösung:
* im Form/Dialog das Interface java#awt#Event#KeyListener implementieren
* das Form/Dialog mit AddKeyEventListener auf alle Controls adden.
dann hast Du ein einziges KeyPressed-Event für alle Controls gleichzeitig
habs allerdings jetzt noch nicht probiert.
Gruß
OlimilO
Location: Cologne, Germany
Occupation: Second Vice President of Distributed Junk and Trash Development
Hallo OlimilO,
danke (wie immer) für Deine schnelle Antwort!
ja, stimmt. War mir nicht sicher, ob das in VB6 so ging oder ob ich das nicht mit (VB).Net verwechsle (da geht's ja noch ein Stück komfortabler).
[X] Done
[X] Done
Das funktioniert auch nun für alle auf dem Dialog befindlichen Controls.
Nur nicht für den Dialog selber...
Danke & Grüße ... Peter
danke (wie immer) für Deine schnelle Antwort!
Quoted from "OlimilO"
Das ist in VB6 sogar noch einfacher.
ja, stimmt. War mir nicht sicher, ob das in VB6 so ging oder ob ich das nicht mit (VB).Net verwechsle (da geht's ja noch ein Stück komfortabler).
Quoted from "OlimilO"
* im Form/Dialog das Interface java#awt#Event#KeyListener implementieren
[X] Done
Quoted from "OlimilO"
* das Form/Dialog mit AddKeyEventListener auf alle Controls adden.
[X] Done
Das funktioniert auch nun für alle auf dem Dialog befindlichen Controls.
Nur nicht für den Dialog selber...
|
|
Jabaco Source |
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 |
Implements java#awt#Event#KeyListener Public Sub cmdCancel_Click() Me.Close End Sub Public Sub cmdOK_Click() ' [Stuff] Me.Close End Sub Public Sub Form_Load() cmdOK.Parent.addKeyListener(Me) ' funktioniert cmdCancel.Parent.addKeyListener(Me) ' funktioniert lblDescription.Parent.addKeyListener(Me) ' funktioniert txtDescription.Parent.addKeyListener(Me) ' funktioniert Me.Parent.addKeyListener(Me) ' funktioniert nicht :( End Sub Public Sub keyTyped(arg2 As KeyEvent) End Sub Public Sub keyPressed(arg2 As KeyEvent) Debug.Print arg2 End Sub Public Sub keyReleased(arg2 As KeyEvent) End Sub |
Danke & Grüße ... Peter
ja super genauso hab ich das gemeint!
aber statt
musst du machen:
da sitzt dummerweise noch was auf dem Form drauf das alle Controls enthält, und das dann den Focus erhält wenn du den Form/Dialog anklickst
Gruß
OlimilO
aber statt
|
|
Jabaco Source |
1 |
Me.Parent.addKeyListener(Me) |
musst du machen:
|
|
Jabaco Source |
1 |
Me.ContentFrame.Parent.addKeyListener(Me) |
da sitzt dummerweise noch was auf dem Form drauf das alle Controls enthält, und das dann den Focus erhält wenn du den Form/Dialog anklickst
Gruß
OlimilO
Location: Cologne, Germany
Occupation: Second Vice President of Distributed Junk and Trash Development
Quoted from "OlimilO"
![]()
Jabaco Source
1 Me.ContentFrame.Parent.addKeyListener(Me)
prima! So klappt es
Danke für den Tipp! Allerdings: Wenn viele Controls auf dem Dialog sitzen kann das 'adden' ja richtig in Arbeit ausufern. Die Gefahr, dass man dann ein Control vergisst ist auch nicht grade zu unterschätzen.
Es gibt nicht zufälligerweise eine Controls-Auflistung, über die man iterieren kann, oder?
|
|
Jabaco Source |
1 2 3 |
For Each C As Control In Me.Controls C.Parent.addKeyListener(Me) Next |
Grüße ... Peter
Achja...
Me.Parent.addKeyListener(Me)
...ist trotzdem erforderlich, also beides
Aber dummerweise gibt es (immer noch) keine gemeinsame Schnittstelle für "Parent" für das einzelne Control.
Vielleicht müßte man die Schnittstelle IJabacoControl einfach um ein ReadOnly Property Parent erweitern.
(btw den Namen "Parent" find ich etwas unglücklich, besser wäre vielleicht "Control" gewesen, aber naja was solls das hat sich eben so eingebürgert)
Gruß
OlimilO
Me.Parent.addKeyListener(Me)
...ist trotzdem erforderlich, also beides
|
|
Jabaco Source |
1 2 3 |
Me.Parent.addKeyListener(Me) 'und Me.ContentFrame.Parent.addKeyListener(Me) |
die gibt es schon siehe ContentFrame.Parent.getComponentCount, und ContentFrame.Parent.getComponent(i)
Quoted
Es gibt nicht zufälligerweise eine Controls-Auflistung, über die man iterieren kann, oder
Aber dummerweise gibt es (immer noch) keine gemeinsame Schnittstelle für "Parent" für das einzelne Control.
Vielleicht müßte man die Schnittstelle IJabacoControl einfach um ein ReadOnly Property Parent erweitern.
(btw den Namen "Parent" find ich etwas unglücklich, besser wäre vielleicht "Control" gewesen, aber naja was solls das hat sich eben so eingebürgert)
Gruß
OlimilO
Location: Cologne, Germany
Occupation: Second Vice President of Distributed Junk and Trash Development
ich kriege es noch nicht ganz hin...
Check-, Radio- und CommandButtons, Comboboxen und die Form selber reagieren wie erwartet.
Aber die Textboxen melden noch kein keyPressed(). Ich vermute, dass da ein eigener KeyEventhandler dazwischenfunkt.
Puh, ganz schön viel Aufwand für so wenig 'Benefit'.
Grüße ... Peter
Check-, Radio- und CommandButtons, Comboboxen und die Form selber reagieren wie erwartet.
Aber die Textboxen melden noch kein keyPressed(). Ich vermute, dass da ein eigener KeyEventhandler dazwischenfunkt.
|
|
Jabaco Source |
1 2 3 4 5 6 7 8 |
Me.Parent.addKeyListener(Me) Me.ContentFrame.Parent.addKeyListener(Me) For Counter = 0 To Me.ContentFrame.Parent.getComponentCount - 1 Dim myComponent As Component = Me.ContentFrame.Parent.getComponent(Counter) Debug.Print myComponent.getClass.toString myComponent.addKeyListener(Me) Next |
Puh, ganz schön viel Aufwand für so wenig 'Benefit'.
Grüße ... Peter
Vielleicht hilft ein Blick in den Quellcode von TextBox im Framework.
Danach hat TextBox verständlicherweise einen eigenen Handler für Tastendrücke:
Generell gebe ich Dir recht: Wenn die vordefinierten Controls im Framework nicht ausreichen,
wird's in Jabaco regelmäßig bitter.
Gruß!
A1880
Danach hat TextBox verständlicherweise einen eigenen Handler für Tastendrücke:
|
|
Jabaco Source |
1 2 3 4 5 6 7 8 |
Public Sub keyPressed(e As KeyEvent) If Me.MultiLine = False Then If e.getKeyCode = KeyEvent.VK_ENTER Then e.consume End If End If RaiseEvent KeyDown(KeyEventToKeyCode(e), KeyEventToShiftConstant(e)) End Sub |
Generell gebe ich Dir recht: Wenn die vordefinierten Controls im Framework nicht ausreichen,
wird's in Jabaco regelmäßig bitter.
Gruß!
A1880
Similar threads
-
Bugreports and known bugs »-
[VERSION 1.5.2] button image doesn't show in design mode
(Mar 27th 2010, 6:06pm)
-
General topics, questions and discussions »-
All forms load, but only one form.Show executes
(Aug 19th 2009, 9:38pm)
-
General topics, questions and discussions »-
Anchor A Button?
(Nov 29th 2009, 4:26am)
-
Suggestions »-
@Manuel Forum Button <JBC> Description = "Insert/format Jabaco Code"
(Aug 20th 2009, 2:07pm)
-
Allgemeine Themen, Fragen und Diskussionen »-
Übergabe von Formulardaten an neue Form
(Feb 22nd 2009, 2:42pm)
