Hallo,
ich bin mal wieder überfordert.
In einem Access-Formular habe ist ein Art Autofilter (ähnlich wie in Excel).
Nach einem Sucheintrag wird der Filter entsprechend gesetzt. Entweder mittels AfterUpdate oder per Button. Am Ende erhält das Feld wieder den Focus (setFocus).
Wenn dieser Sub mit dem Button ausgeführt wurde, ist der Inhalt mit setFocus am Ende sogar markiert. Wenn das aber mittels AfterUpdate geschehen ist, leider nicht.
Wie kann ich das auch so programmieren, dass nach dem AfterUpdate der Textinhalt markiert ist.
Damit könnte einfach nach einem neuen Begriff suchen, ohne den Text erst zu markieren oder löschen zu müssen.
Vielen Dank
gruß Christoph
Hallo,
z. B..
Me!Suchfeld.Setfocus
Me!Suchfeld.Selstart=0
Me!Suchfeld.Sellength=255
Danke, das funktioniert leider aber nicht.
Während des Filtervorgangs ist der Text 2x kurz (Sekundenbruchteil) hintereinander markiert und am Ende aber nicht mehr.
Hier mal der Code (als erstes das AfterUpdate und dann der Aufruf zum Filtern)
Vielleicht hilft das weiter...
Private Sub txtIdentNrSuche_AfterUpdate()
filt = True
Kerfolg = 29
filtern
End Sub
Private Sub filtern()
...
txtIdentNrSuche.SetFocus
End sub
Hallo,
naja, habe jetzt keine Lust, den ganzen Code danach zu untersuchen, ob das betroffene Suchfeld anderweitig oder zusätzlich manipuliert wird...
Setz einen Haltepunkt und durchfahre den Code mit Einzelschritt. Dann sieht Du ,. was wo dabei passiert.
Hi DF6GL,
so war es natürlich auch nicht gedacht. Wollte nur mal den Zusammenhang der beiden subs darlegen.
Habe nichts weiter gefunden, was dies beeinflussen könnte.
Versuche halt mal weiter
Trotzdem danke.
Gruß Christoph
Hallo Christoph,
ZitatWenn dieser Sub mit dem Button ausgeführt wurde, ist der Inhalt mit setFocus am Ende sogar markiert. Wenn das aber mittels AfterUpdate geschehen ist, leider nicht.
Das liegt am Ereignis After_Update.
Ich sehe zwei Lösungen:
1. den Aufruf nach Before_Update verlagern
2.
Me!IrgendeinControl.SetFocus
Me!txtIdentNrSuche.SetFocushth
gruss ekkehard
Noch eine Lösung: Das Control Me!txtIdentNrSuche zum einzigen Control auf dem Form machen, dass überhaupt den Focus erhalten kann, und den Zyklus auf "aktueller Datensatz" einstellen.
Hallo,
ich habe mal versucht dies in die Before_Update einzubauen. Kommt aber eine Fehlermeldung.
Me!txtSuche.SetFocus (anderes Fled)
Me!txtIdentNrSuche.SetFocus
Laufzeitfehler 2108
Sie müssen das Feld erst speichern, bevor Sie die GeheZuSteuerelement-Aktion, die GoToControl-Methode oder die SetFocus-Methode ausführen können.
Das gleiche habe ich aber auch mal in der After_Update Anweisung mit eingebaut. Aber da wird der Text auch nicht markiert.
Ich habe ein Screenshot gemacht wie das ganze aussieht.
Egal in welchen Spalten man filtert; es wird immer die gleiche Funktion "filtern" ausgeführt Er soll dann abschließend immer in die Linke Spalte (Ident-Nr.) zurück und den Text markieren (wenn vorhanden). Das funktioniert auch aus jedem Feld, nur eben nicht wenn sich bereits im linken Feld befindet.
Danke & Gruß Christoph
[Anhang gelöscht durch Administrator]
Hallo Christoph,
Zitatich habe mal versucht dies in die Before_Update einzubauen. Kommt aber eine Fehlermeldung.
Me!txtSuche.SetFocus (anderes Fled)
Me!txtIdentNrSuche.SetFocus
Sorry, da habe ich vergessen Dir zu erklären, dass Du in Before_Update keinen Focus setzen musst.
Stattdessen musst Du ein
Cancel = True
einfügen, dann bleibt der Cursor im Feld.
ZitatDas gleiche habe ich aber auch mal in der After_Update Anweisung mit eingebaut. Aber da wird der Text auch nicht markiert
Die Zeilen von Franz hast Du aber auch drin oder?
Me!Suchfeld.Setfocus
Me!Suchfeld.Selstart=0
Me!Suchfeld.Sellength=255Versuch's noch mal.
hth
gruss ekkehard
Hallo,
jetzt bin ich ganz verwirrt.
Was muss ich nochmal wo einbauen?
Bei txtIdentNrSuche_AfterUpdate:
Me!txtIdentNrSuche.SetFocus
Me!txtIdentNrSuche.SelStart = 0
Me!txtIdentNrSuche.SelLength = 255
Bei cmbKlassifizierung_BeforeUpdate: (nachfolgendes Feld)
cancel = true
Benötige ich noch etwas?
Funktioniert nämlich nicht... (also keine Veränderung)
Danke
gruß Christoph
Hallo Chris,
auch wenn das Verhalten von access beim Markieren mir ein Rätsel bleiben wird (mal geht es wie gewünscht, mal nicht), hatte ich mit dem folgenden mal solch eine Aufgabe gelöst:
Im Ereignis "Bei Mausbewegung" stehen die Zeilen:
Me.DeinFeld.SetFocus
Me.DeinFeld.SelStart=0
Me.DeinFeld.SelLength=255
Vielleicht hilft das auch bei Dir.
Harald
Die Ereignisse Beim Hineingehen, Bei Fokuserhalt, Beim Mausklick brachten in meinem Programm nichts.
Hallo Christoph,
ZitatWas muss ich nochmal wo einbauen?
Bei txtIdentNrSuche_AfterUpdate:
Me!txtIdentNrSuche.SetFocus
Me!txtIdentNrSuche.SelStart = 0
Me!txtIdentNrSuche.SelLength = 255
Bei cmbKlassifizierung_BeforeUpdate: (nachfolgendes Feld)
cancel = true
Das sind jetzt aber plötzlich zwei Controls, - war da am Anfang nicht nur von "txtIdentNrSuche" die Rede.
Für dieses Control gilt:
Entweder - oder.
Also entweder verwendest Du das AfterUpdate-Ereignis, dann
muss dieser Schnippsel da rein
Me!IrgendEinAnderesControl.Setfocus
'Das ist wichtig, sonst klappt es nicht
Me!txtIdentNrSuche.SetFocus
Me!txtIdentNrSuche.SelStart = 0
Me!txtIdentNrSuche.SelLength = 255
Im BeforeUpdate-Ereignis statt dessen
Me!txtIdentNrSuche.SelStart = 0
Me!txtIdentNrSuche.SelLength = 255
Cancel = True
'Das bricht den Update-Vorgang (das Speichern des DS) ab.
Was da beim Control "cmbKlassifizierung" passieren soll, steht IMO auf einem anderen Blatt. - Klär' uns auf.
hth
gruss ekkehard
Hallo,
betrifft nur das txtIdentNrSuche! Dachte nur, dass ich im nächsten Feld in BeforeUpdate etwas einbauen muss.
Also wenn ich das bei AfterUpdate einbaue
Private Sub txtIdentNrSuche_AfterUpdate()
filt = True
Kerfolg = 29
filtern
Me!cmbKlassifizierung.SetFocus
Me!txtIdentNrSuche.SetFocus
Me!txtIdentNrSuche.SelStart = 0
Me!txtIdentNrSuche.SelLength = 255
End Sub
ist die Situation gleich (wie zu Beginn meines Threads)
Wenn ist das bei BeforeUpdate einbaue
Private Sub txtIdentNrSuche_BeforeUpdate(Cancel As Integer)
Me!txtIdentNrSuche.SelStart = 0
Me!txtIdentNrSuche.SelLength = 255
Cancel = True
End Sub
komme ich ins Feld und kann eintippen, komme aber nicht mehr raus und macht auch nichts mehr. Kann nichts anders mehr im Formular anklicken.
Gruß Christoph
Hallo Christoph,
Zitatbetrifft nur das txtIdentNrSuche! Dachte nur, dass ich im nächsten Feld in BeforeUpdate etwas einbauen muss.
Das nächste Feld hat damit ja nichts zu tun.
ZitatAlso wenn ich das bei AfterUpdate einbaue
Private Sub txtIdentNrSuche_AfterUpdate()
filt = True
Kerfolg = 29
filtern
Me!cmbKlassifizierung.SetFocus
Me!txtIdentNrSuche.SetFocus
Me!txtIdentNrSuche.SelStart = 0
Me!txtIdentNrSuche.SelLength = 255
End Sub
ist die Situation gleich (wie zu Beginn meines Threads)
In der Sub "filtern" sind die Zeilen mit Sel... und SetFocus aber NICHT mehr drin, - oder?
Dann sollte das eigentlich problemlos funktionieren.
gruss ekkehard