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

  • Автор темы Irichka
  • Дата начала
Статус
Закрыто для дальнейших ответов.
I

Irichka

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

Код:
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
 

hosm

* so what *
18.05.2009
2 442
6
#2
может, ListIndex заменить Combo1.Selectedindex или Combo1.ListIndex (зависит от версии вб).
 
I

Irichka

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

Tanya

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

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

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

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

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

Код:
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 является чем-то другим ... то чем же?
 
I

Irichka

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

Tanya

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

VBAaddict

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

Irichka

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

Код:
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
 
Статус
Закрыто для дальнейших ответов.