Neuigkeiten:

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

Mobiles Hauptmenü

Text markieren nach AfterUpdate

Begonnen von cyberchris, Dezember 05, 2011, 12:38:32

⏪ vorheriges - nächstes ⏩

cyberchris

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

DF6GL

Hallo,

z. B..


Me!Suchfeld.Setfocus
Me!Suchfeld.Selstart=0
Me!Suchfeld.Sellength=255

cyberchris

#2
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

DF6GL

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.

cyberchris

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

Beaker s.a.

#5
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.SetFocus


hth
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.
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)

cyberchris

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]

Beaker s.a.

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=255


Versuch's noch mal.
hth
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)

cyberchris

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

bahasu

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.
Servus

Beaker s.a.

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
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)

cyberchris

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

Beaker s.a.

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
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)