у меня есть комбобокс cmbVALUE. При загрузке формы он заполняется некоторыми значениями из базы с помощью некой функции initcombo:
- Код: Выделить всё
Public Sub InitCombo(ByRef Combo As ComboBox, Optional ByVal Table As String, Optional ByVal Field As String)
Dim tRs As Recordset
Dim OldCmbStr As String
Dim TableStr As String
Dim FieldStr As String
Dim bFound As Boolean
bFound = False
OldCmbStr = Combo.Text
Combo.Clear
Combo.AddItem "<New value...>"
If Table = "" Then TableStr = "IS NULL" Else TableStr = "= '" & Table & "'"
If Field = "" Then FieldStr = "IS NULL" Else FieldStr = "= '" & Field & "'"
Set tRs = User.DbInterface.DoQuery("SELECT DISTINCT REF_VALUE FROM SPR_ALL WHERE REF_TABLE " & TableStr & " AND REF_FIELD " & FieldStr)
Do While Not tRs.EOF
If OldCmbStr = tRs.fields("REF_VALUE") Then
bFound = True
End If
Combo.AddItem tRs.fields("REF_VALUE")
tRs.MoveNext
Loop
If bFound = True Then
Combo.Text = OldCmbStr
Else
If Combo.ListCount > 1 Then
Combo.Text = Combo.List(1)
Else
Combo.Text = ""
End If
End If
End Sub
Как Вы заметили, первым туда загоняется значение <New value...>.
Теперь, я делаю обработчик события OnClick с целью выяснения, а не кликнул ли юзер по значению <New value...> моего комбобокса. Если да - то выводится диалог ввода нового значения, после валидации которого происходит запись этого значения в базу и повторная инициализация моего комба:
- Код: Выделить всё
If cmbDOOR_TYPE = "<New value...>" Then
dlgAddNewValue.Table = "FLAT"
dlgAddNewValue.Field = "DOOR_TYPE"
dlgAddNewValue.Show vbModal
End If
Вот обработка события OnClick кнопки Ok диалогового окна ввода нового значения:
- Код: Выделить всё
Private Sub OKButton_Click()
If User Is Nothing Then Exit Sub
User.DbInterface.DoCommand "INSERT INTO SPR_ALL (REF_TABLE,REF_FIELD,REF_VALUE) " & _
"VALUES ('" & msTable & "','" & msField & "','" & txtNEW_VALUE & "')"
msNewValue = txtNEW_VALUE
If Not mvarParentCombo Is Nothing Then
mvarParentCombo = msNewValue
InitCombo mvarParentCombo, msTable, msField
End If
Unload Me
End Sub
также в функции InitCombo перед очисткой комбобокса запоминается предыдущее значение с тем, что при его повторном заполнении если такое значение присутствует в списке, то оно будет выведено на экран.
При щелчке по пункту "<New value...>" выводится как и положено диалог, туда я ввожу значение и нажимаю Ok, после чего происходит повторная инициализация комба. Но вот почему то введенное мною в диалоге значение не хочет вставать текстом для комба (т.е.в поле выбранного значения). Хотя в процедуре OkButton_Click прописано, что перед вызовом InitCombos в поле комба записывается новое значение.
Самое поганое, что если в дебаге запустить то, новое значение появляется в комбе после закрытия диалога но перед выходом из события Click моего комба. Как только происходит выход из события, значение пропадает и поля ввода.
Кто нибудь знает, в чем дело?