Изменение данных в Combobox

Тема в разделе "Visual Basic", создана пользователем Irichka, 30 ноя 2010.

Статус темы:
Закрыта.
  1. Irichka

    Irichka Гость

    Есть 2 переключателя (Dobavlenie и Izmenenie) и 2 элемента ComboBox. У меня в программе при нажатии Izmenenie меняется только первое введённое значение элемента ComboBox. Подскажите пожалуйста, как сделать так, чтоб изменялось любое выделенное значение. :)
    И ещё, возможно ли добавляя значения в Combo1 сразу же заносить их и в Combo2???

    Код (LotusScript):
    Private SUB Combo1_KeyPress(KeyAscii AS INTEGER)
    IF KeyAscii=13 THEN
    IF Dobavlenie = True THEN Combo1.AddItem Combo1.Text
    IF Izmenenie = True THEN Combo1.LIST(ListIndex)=Combo1.Text
    END IF
    END SUB
     
  2. hosm

    hosm * so what *

    Регистрация:
    18 май 2009
    Сообщения:
    2.450
    Симпатии:
    7
    может, ListIndex заменить Combo1.Selectedindex или Combo1.ListIndex (зависит от версии вб).
     
  3. Irichka

    Irichka Гость

    Нет, проверила, так изменение вообще не происходит.
     
  4. Tanya

    Tanya Гость

    У вас не очень понятно, что такое ListIndex.

    Если под ListIndex понимается Combo1.ListIndex (или SelectedIndex или любое другое свойство Combo), то на момент проверки условия:

    IF Izmenenie = True THEN Combo1.LIST(ListIndex)=Combo1.Text

    Combo1.ListIndex = -1 т.к. комбик уже потерял то значение, которое было выбрано и не знает к чему его применять.
    Значит нужно запоминать индекс редактируемой строки, например в модульной переменной.

    Если ListIndex и является такой переменной, то нужно проверить, всегда ли она корректно изменяется.

    Код (LotusScript):
    Private ListIndex As Integer

    Private Sub Combo1_Click()
    ListIndex = IIf(Izm, Combo1.ListIndex, -1)
    End Sub

    Private Sub Combo1_KeyPress(KeyAscii As Integer)
    If KeyAscii = 13 Then
    If Dob = True Then
    Combo1.AddItem Combo1.Text
    Combo1.ListIndex = Combo1.NewIndex

    Combo2.AddItem Combo1.Text

    ElseIf ListIndex> -1 Then
    Combo1.List(ListIndex) = Combo1.Text
    Combo1.ListIndex = istIndex
    End If

    'If Izm = True Then Combo1.List(ListIndex) = Combo1.Text
    End If
    End Sub

    Private Sub Dob_Click()
    ListIndex = IIf(Izm, Combo1.ListIndex, -1)
    End Sub

    Private Sub Izm_Click()
    ListIndex = IIf(Izm, Combo1.ListIndex, -1)
    End Sub
    Если ListIndex является чем-то другим ... то чем же?
     
  5. Irichka

    Irichka Гость

    Tanya , спасибо за объяснение! Применила данный код к своей программке, меняется выделенная строка, но только больше одного символа при изменении в строку ввести нельзя. С чем это может быть связано?
     
  6. Tanya

    Tanya Гость

    В моем варианте (только представленный код) несколько символов вводился без проблем.
    Возможно, у вас есть еще обработчик событий для Combo.
    Особенно подозрительным в таких случаях выглядит Combo1_Change.
    Проверьте все остальные события.
     
  7. VBAaddict

    VBAaddict Гость

    А у вас комбобокс(ы) привязан только к одному полю?
    Потому как если их 2, а 1-е с 0-й шириной, бишь скрытое, то механизм добавления совсем другой... В свое время попарился с таким случаем...
     
  8. Irichka

    Irichka Гость

    Всем спасибо за помощь!!! Разобралась с этими элементами.=) Кому интересно, вот что получилось:

    Код (LotusScript):
    Dim curValue As Long
    Dim a As Integer

    Private Sub Form_Load()
    StatusBar1.Panels(1).Style = sbrData
    StatusBar1.Panels(2).Style = sbrTime
    List_Style.ListIndex = 0
    End Sub

    Private Sub List_Style_Click()
    If List_Style.ListIndex = 0 Then Znachenie2.Visible = False
    If List_Style.ListIndex = 1 Then
    Znachenie2.Visible = True
    End If
    End Sub

    Private Sub Razreshenie_Mouseup(Button As Integer, Shift As Integer, X As Single, Y As Single)
    If Button = 1 And a = 0 Then
    Razreshenie.Value = False
    a = 1
    Else
    a = 0
    End If
    List_Style.Enabled = Razreshenie.Value
    Dobavlenie.Enabled = Razreshenie.Value
    Izmenenie.Enabled = Razreshenie.Value
    End Sub

    Private Sub Vixod_Click()
    If MsgBox("Вы уверенны?", 36, "Выход?") = 6 Then
    Unload My_lab
    End If
    End Sub

    Private Sub Znachenie_Click()
    curValue = Znachenie.ListIndex
    End Sub

    Private Sub Znachenie_KeyPress(KeyAscii As Integer)
    If KeyAscii = 13 Then
    If Dobavlenie = True Then Znachenie.AddItem Znachenie.Text
    If Izmenenie = True Then Znachenie.List(curValue) = Znachenie.Text
    Znachenie2.AddItem Znachenie.Text
    Znachenie2.List(curValue) = Znachenie.List(curValue)
    End If
    End Sub
    Private Sub Znachenie2_Click()
    curValue = Znachenie2.ListIndex
    End Sub

    Private Sub Znachenie2_KeyPress(KeyAscii As Integer)
    If KeyAscii = 13 Then
    If Dobavlenie = True Then Znachenie2.AddItem Znachenie2.Text
    If Izmenenie = True Then Znachenie2.List(curValue) = Znachenie2.Text
    Znachenie.AddItem Znachenie2.Text
    Znachenie.List(curValue) = Znachenie2.List(curValue)
    End If
    End Sub
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей