Hallo
Ich habe vor einiger Zeit eigenständiges Suchformular kreiert. Das ist inzwischen gewachsen und ich wollte die Funktionialität überarbeiten. Das handling des Formulars passiert vollständig auf einer Klasse.
Beim ersten öffnen des Suchformulares werden via die Klasse alle nötigen Parameter, Event-Prozeduren etc. gesetzt. Beim Auswählen eines Buttons, der im Suchformular vorhanden ist, wird im aufrufenden Formular die Datenherkunft angepasst und das Suchformular ausgeblendet, damit es schnell wieder zur Verfügung steht. Beim nächsten Klick auf den Suchen-Buttton im aufrufenden Formular wird das Suchformular einfach wieder eingeblendet. Soweit funktioniert alles gut
Jetzt habe ich ein Phänomen, welches ich nicht erklären kann. Ich möchte im Suchformular sowohl mit einem Mausklick als auch mit der Enter-Taste das Gleiche machen, nämlich suchen. Also habe ich in der Klasse einfach folgendes gemacht.
Private Sub cmdOK_Click() UpdateCriteriaAndOrderBy SearchForm.Visible = False End Sub
und
Private Sub SearchForm_KeyDown(KeyCode As Integer, Shift As Integer) Select Case KeyCode Case vbKeyReturn 'Enter Call cmdOK_Click Case vbKeyEscape 'Escape Call cmdCancel_Click End Select End Sub
Damit wird die Funktion ausgeführt:
Private Function UpdateCriteriaAndOrderBy() Dim i As Long Dim ctl As control On Error GoTo UpdateCriteriaAndOrderBy_Error With SearchCriteria .ClearCriteria .ClearOrderBy If SearchForm!opgFilter = 1 Then For i = 1 To 6 If Not IsNull(SearchForm("Suchfeld" & CStr(i))) Then If SearchForm("Suchkriterium" & CStr(i)).Visible Then Set ctl = SearchForm("Suchkriterium" & CStr(i)) ElseIf SearchForm("cboSuchkriterium" & CStr(i)).Visible Then 10 Set ctl = SearchForm("cboSuchkriterium" & CStr(i)) End If 20 If Not IsNull(ctl) Then
Es geht dabei um die Zeile 10 und 20.
Wenn ich per Mausklick im Suchformular die Suche starte, dann funktinoiert alles bestens. Wenn ich via Enter -Taste suche, dann gibt mir Zeile 10 bei jedem ungeraden Mal (die erste Suche, die Dritte, die Fünfte ect.) Null as Wert von ctl aus. Jedes gerade Mal funktioniert sie.
Wie kann denn das sein? Ich verwende ja für vbReturn und den Klick immer die gleiche Prozedur?
Danke schon im Voraus und Gruss
Thomas
Danke und Gruss Thomas