Ерунда какая-тО!!

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
MiGan
Обычный пользователь
Обычный пользователь
 
Сообщения: 60
Зарегистрирован: 02.05.2005 (Пн) 13:27

Ерунда какая-тО!!

Сообщение MiGan » 25.10.2005 (Вт) 15:28

Не понимаю, что делается:
у меня есть комбобокс 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 моего комба. Как только происходит выход из события, значение пропадает и поля ввода.

Кто нибудь знает, в чем дело?

Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 48

    TopList