Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Fokus auf Steuerelement

Begonnen von C4RL0, Juni 15, 2012, 07:51:48

⏪ vorheriges - nächstes ⏩

C4RL0

Hallo zusammen,

Ich habe im Hauptformular ein Registersteuerelement.
Im Form_Load Event des Hauptformulars setze ich den Fokus auf dieses Element:

Me.rcaEinlesen.SetFocus

Die anschließende manuelle Abfrage
Debug.Print Screen.ActiveControl.Name
bestätigt dieses auch. Ergebnis:
rcaEinlesen

Allerdings reagriert das Steuerelement nicht auf das "KeyDown"-Element. Hierzu muss ich es explizit anklicken, so dass der gepunktete "Aktiv"-Rahmen (siehe oberes Bild) sichtbar ist.
Wie schaffe ich es, dass das Element direkt nach dem Start der Anwendung auf KeyDown reagiert?

[Anhang gelöscht durch Administrator]
_____________________________
Gruß
Carlo

69bruno

Ohne es getestet zu haben, würde ich einen Access-Key definieren und mit einer sendkey-Anweisung auf den Reiter wechseln........

SendKeys "%x", True

Wobei das "x" durch den gewählten Access-Key zu ersetzen wäre..........   ???

Ich habe grade kein entsprechendes Formular mit Registersteuerelement da.....versuch doch mal.

Gruß
69
If Brain <= requestoutofPost then
  PostonForum "Ich verstehe Dein Problem nicht....."
Else
  PostonForum "Denk erst mal über die Normalisierung nach......"
End If

bahasu

#2
Hi,

Wenn Du im Register ein Unterformular-Steuerelement hast, probier mal, den Fokus auf dieses UFo zu setzen (so tun, als ob es kein Register gibt).

Harald
Servus

C4RL0

Zitat von: bahasu am Juni 15, 2012, 14:30:48
...Wenn Du im Register ein Unterformular-Steuerelement hast, probier mal, den Fokus auf dieses UFo zu setzen (so tun, als ob es kein Register gibt).lll

Hi,
es ist bewusst kein aktives Steuerelement vorhanden, nur ein inaktives in welchem eben diese "OnKey"-Tasteneingaben zu sehen sein sollen.

Zitat von: 69bruno am Juni 15, 2012, 12:27:55
SendKeys "%x", True
Wobei das "x" durch den gewählten Access-Key zu ersetzen wäre..........   

2X SendKeys vbTab, True hat mir an der Stelle weitergeholfen, Danke!
_____________________________
Gruß
Carlo

Beaker s.a.

Hallo Carlo,
Sendkey ist aber buggy  >:( , und ab spätestens A2010
(vielleicht schon ab A007) wird es gar nicht mehr unter-
stützt.
Bei mir reicht ein einfaches
Me!RegisterControl = n
Wobei n der Seitenindex ist.
Andererseits
Zitates ist bewusst kein aktives Steuerelement vorhanden,
nur ein inaktives in welchem eben diese "OnKey"-Tasteneingaben
zu sehen sein sollen.
Wo werden diese Tastatureingaben denn gemacht?
Wenn die von ausserhalb des Registers kommen,
kann das ja nicht den Focus haben.
gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

C4RL0

Zitat von: Beaker s.a. am Juni 18, 2012, 22:41:11
Hallo Carlo,
Sendkey ist aber buggy  >:( , und ab spätestens A2010
(vielleicht schon ab A007) wird es gar nicht mehr unter-
stützt.
Bei mir reicht ein einfaches
Me!RegisterControl = n
Wobei n der Seitenindex ist.
Andererseits
Zitates ist bewusst kein aktives Steuerelement vorhanden,
nur ein inaktives in welchem eben diese "OnKey"-Tasteneingaben
zu sehen sein sollen.
Wo werden diese Tastatureingaben denn gemacht?
Wenn die von ausserhalb des Registers kommen,
kann das ja nicht den Focus haben.
gruss ekkehard

Hallo  Ekkehard,

Me!RegisterControl = n
habe ich ausprobiert. Es bewirkt an der Stelle aber nichts, da das Registerelement ja sowieso schon den Fokus hat.
Die Tastatureingaben kommen von einem Barcodescanner, erscheinen in einer (inaktiven) Textbox, nachdem Sonderzeichen, etc. herausgefiltert wurden.

_____________________________
Gruß
Carlo

DF6GL

Hallo,

ich verstehe das Ganze auch nicht....   was heißt denn



Zitat"Die Tastatureingaben kommen von einem Barcodescanner, erscheinen in einer (inaktiven) Textbox, nachdem Sonderzeichen, etc. herausgefiltert wurden."

Normalerweise schreibt ein Barcode-Scanner die Zeichen in diejenige Textbox, die den Fokus hat. Deshalb sollte es reichen, diese Textbox auf "aktiv" und "nicht gesperrt" zu setzen und den Fokus auf dieses Textfeld zu legen:

Sub Form_Load()
Me!BarcodeTextfeld.Sefocus
End Sub


Wenn es eine Funktionalität (Prozedur) gibt, die den Barcodescanner "bedient", d. h. die Zeichen werden nicht gleich  in ein Textfeld geschrieben, sondern erst (irgendwie) bearbeitet, dann sollte diese Prozedur die (manipulierten) Zeichen in das Textfeld schreiben:


.
.
.
Me!Register1.Pages("Seitexy").Setfocus  'oder Me!Register1=n
Me!Textfeld1 = VariableInDerDieBarcodezeichenStehen
.
.
.

Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

C4RL0

#7
Zitat von: DF6GL am Juni 19, 2012, 10:10:58
...Wenn es eine Funktionalität (Prozedur) gibt, die den Barcodescanner "bedient", d. h. die Zeichen werden nicht gleich  in ein Textfeld geschrieben, sondern erst (irgendwie) bearbeitet, dann sollte diese Prozedur die (manipulierten) Zeichen in das Textfeld schreiben:

Exakt, die Prozedur schreibt die Zeichen in das Textfeld. Das funktioniert auch alles wunderbar über das KeyDown-Event des Registerelements.
Dieses Event wird aber nur ausgelöst, wenn das gepunktete Rähmchen um den Tab oben erscheint, obwohl das Element bereits den Focus hat (wie oben beschrieben).

Verwendetes Event:
regEinAus_KeyDown

Tabs auf dem RegElement "regEinAus":
"rcaEinlesen"
"rcaAusgabe"

Wie gesagt, "Debug.Print Screen.ActiveControl.Name" sagt mir, dass rcaEinlesen den Focus hat. Das RegElement "regEinAus" selber besitzt die Methode "SetFocus" ja nicht.

Nur den Focus zu haben und den gepunkteten Rahmen zu aktivieren scheinen mir zwei verschiedene Dinge zu sein.
Ersteres reicht nicht aus um bei Tastendruck das KeyDown-Event auszulösen.
_____________________________
Gruß
Carlo

DF6GL

Hallo,

Du hängst Dich immer noch und wieder am Register auf.  Vergiss doch einfach das Register... und dieses KeyDown-Event ...



"die Prozedur schreibt die Zeichen in das Textfeld" 

WIE macht die das?  Poste mal den (gesamten damit zusammenhängenden) Code....
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

C4RL0

Zitat von: DF6GL am Juni 19, 2012, 12:02:32
Hallo,

Du hängst Dich immer noch und wieder am Register auf.  Vergiss doch einfach das Register... und dieses KeyDown-Event .....

Ich habe ein Objekt Barcode, welches sukzessive mit Keys gefüllt wird.

Private Sub regEinAus_KeyDown(KeyCode As Integer, Shift As Integer)
   If Me.regEinAus.Value = 0 Then
       Barcode.KeyCodeAdd KeyCode, Shift
   End If
End Sub


Das Objekt selber filtert Zeichen, tauscht andere aus, erkennt (auch nicht druckbare) Trennzeichen, trennt Blöcke, etc..., aber das nur nebenbei.

Sobald ein <ENTER> eingegeben wird, feuert das Objekt das Event Barcode_Ready.

In der Prozedur Barcode_Ready fülle ich die Datenbank damit, und zur Anzeige auch simpel die Textboxen mit

Me.txtScanAuftragsnummer.Value = Barcode.Block(0)
Me.txtScanArtikel.Value = Barcode.Block(1)


Das alles funktioniert wie gesagt bestens, ich habe nur das (kleine) oben genannte Problem, und das nur nach Start der Anwendung.
_____________________________
Gruß
Carlo

bahasu

#10
Hi,

neben den obigen "Unpäßlichkeiten" bei sendkeys kann auch vorkommen, dass die numlock-Einstellung verstellt wird.
Das zieht dann weiteren VBA-Code nach sich, um dann diese Macke zu vermeiden. Und damit sind dann weitere Fehler möglich.

Deshalb hatte ich das direkte focus-Setzen (ob UFO oder Steuerelement sei egal) vorgeschlagen.

Harald
Servus

DF6GL

Hallo,

mhmm, ich versteh das jetzt so:


Es gibt ein Eingabe-Textfeld "regEinAus", das bei jedem Tastendruck die Eingabezeichen an eine Barcode-Eigenschaft liefert.  Sobald Enter gedrückt wird, erfolgt eine  Zuweisung der manipulierten Zeichen an weitere Textfelder.



Nach dem  Laden des Formulares soll die Zeichen-Eingabe gleich im Feld "regEinAus" stattfinden können.


Sub Form_Load()
Me!regEinAus.Setfocus
End Sub


Wo ist da das Problem?

Wenn "regEinAus"  ein Register-Steuerelement sein sollte, dann wäre das eine falsche Verwendung für den Gebrauch zur Dateneigabe.... Platziere einfach in diesem Fall ein Textfeld auf der Registerseite und benutze dessen Key-xx-Ereignisse..
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

C4RL0

Zitat von: DF6GL am Juni 19, 2012, 18:47:04
Hallo,

mhmm, ich versteh das jetzt so:


Es gibt ein Eingabe-Textfeld "regEinAus", das bei jedem Tastendruck die Eingabezeichen an eine Barcode-Eigenschaft liefert.  Sobald Enter gedrückt wird, erfolgt eine  Zuweisung der manipulierten Zeichen an weitere Textfelder.



Nach dem  Laden des Formulares soll die Zeichen-Eingabe gleich im Feld "regEinAus" stattfinden können.


Sub Form_Load()
Me!regEinAus.Setfocus
End Sub


Wo ist da das Problem?

Wenn "regEinAus"  ein Register-Steuerelement sein sollte, dann wäre das eine falsche Verwendung für den Gebrauch zur Dateneigabe.... Platziere einfach in diesem Fall ein Textfeld auf der Registerseite und benutze dessen Key-xx-Ereignisse..

"regEinAus"  ist ein Register-Steuerelement. Ich verwende das Event KeyDown dieses Register-Steuerelements um den Key an eine Klasse weiter zu leiten. Das Funktioniert ja auch tadellos.
Nur reicht ein "SetFocus" nicht aus, um "aktiv" zu sein und das KeyDown-event auf Tastendruck zu feuern.
_____________________________
Gruß
Carlo