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]
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
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
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!
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 = nWobei 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
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 = nhabe 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.
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
.
.
.
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.
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....
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 SubDas 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.
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
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..
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.