Hallo!
In einem Formular werden Text- und ComboBoxes fuer die Eingabe einer Filterbedingung verwendet.
Tritt das Ereignis 'Change' ein, wird das Formular neu gefiltert.
Das Formular wird also bei der Eingabe permanent mitgefiltert.
Problem: Wird ein Wert eingegeben, der nicht im Feld vorhanden ist, wird das Formular korrekt gefiltert (keine Datensaetze angezeigt), aber es kommt auch zu einem Fehler: "Eigenschaft kann nicht gesetzt werden, solange das Steuerlement nicht den Fokus hat (Fehler 2185)."
Laut Meldung triit der Fehler beim Versuch auf, den Cursor im Suchfeld zu setzen.
Den sollte es aber haben. Es wurde eben beschrieben, der Code setzt den Fokus extra noch einmal und im Debugging ist der Name des korrekten Elements zu lesen.
620 If Not oActCntl Is Nothing Then
630 oActCntl.SetFocus
640 oActCntl.SelStart = iActTxtSelPos
650 oActCntl.SelLength = 0
660 End If
Ich wuerde mich vorerst mit 'On Error Resume Next' behelfen.
Aber das ist nicht fein und ich wuesste gern den Grund fuer das Verhalten.
Gruss Stele
Hallo Stele,
der von dir gezeigte Code läßt leider nicht erkennen, wo der Fehler liegen könnte. Im Übrigen ist das Debuggen von Code mit Fokushandling oft nicht möglich, weil dieses durch das Debuggen beeinflusst wird.
Knobbi38
Hallo Knobbi!
Zeile 640.
SelStart soll geschrieben werden, loest aber einen Fehler aus, weil das Element nicht den Fokus hat.
Dieser Fehler taucht nur auf, wenn der Filter eine 'leere Tabelle' zurueck gibt.
Ansonsten wird der Code problemlos durchlaufen.
Was das Eine mit dem Anderen zu tun hat, erschliesst sich mir nicht.
Gruss Stele
Wie bereits gesagt, kann man nur Vermutungen anstellen. Wenn du aber den Fehler schon selber so eingrenzen kannst, würde ich den Zustand, welcher zum Fehler führt, mit einer IF Bedingung prüfen und ggf. abfangen.
Es gäbe auch die Lösung, die letzte Änderung, welche zu einer leeren Ergebnismenge geführt hat, einfach zurückzunehmen und dem Anwender das mit einem Beep zu quittieren.