Вопрос по элементу ListBox в Access2000

Программирование на Visual Basic for Applications
Blob
Начинающий
Начинающий
 
Сообщения: 3
Зарегистрирован: 23.09.2004 (Чт) 18:04
Откуда: Харьков

Вопрос по элементу ListBox в Access2000

Сообщение Blob » 23.09.2004 (Чт) 18:27

Здравствуйте! Вот нашёл ваш сайт, а тут и вопросик появился:
В Access2000 есть форма с ListBox-ом "lst_Added". Его св-ву RowSource присваивается строка из значений, разделённых символами "; ". Есть такая функция:
Код: Выделить всё
Function DelSelected(Strng As String, ptrn As String)
    Dim RegEx      As Object
    Set RegEx = CreateObject("vbscript.regexp")
    ' set the RegExp parameters
    With RegEx
        'look for global matches
        .Global = True
        'look for strings matching following pattern
        .Pattern = ptrn
    End With
    If RegEx.Test(Strng) Then _
        Strng = RegEx.Replace(Strng, "")
    DelSelected = Strng
End Function

(Предварительно в системе зарегистрена scrrun.dll)
Задумка состоит в том, чтоб из вышеупомянутого листбокса удалялись выделенные значения (его св-во Multiselect выставлено в 1).
Вопрос:
Почему вот это работает:
Код: Выделить всё
Private Sub btn_Left_Click()
    Dim varItem As Variant
    For Each varItem In Me!lst_Added.ItemsSelected
        Debug.Print Me!lst_Added.ItemData(varItem)
    Next varItem
   
End Sub

- только как-то странно, даже если выделено два значения, они печатаются за один проход цикла For...Next.
А вот это нет:
Код: Выделить всё
Private Sub btn_Left_Click()
    Dim varItem As Variant       
    For Each varItem In Me!lst_Added.ItemsSelected
         Me![lst_Added].RowSource = _
                            DelSelected(CStr(Me![lst_Added].RowSource), _
                                    CStr(Me!lst_Added.ItemData(varItem)) & "; ")
   Next varItem
End Sub

- удаляется только первое выделенное значение. И что это за коллекция такая странная ItemsSelected, в которой только один ключ "Count" и больше ничего?

bask
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 01.06.2004 (Вт) 15:55

я удаляю элементы примерно так...

Сообщение bask » 08.10.2004 (Пт) 12:18

Private Sub DeleteItems_Click()
Dim lngCountSelItems As Long, intCountFields As Integer, ary As Variant
'число выделенных элементов (уменьшено на 1)
intCountSelItems = Me.ListItems.ItemsSelected.Count - 1
'число столбцов списка
intCountFields = Me.ListItems.ColumnCount
'закидываем RowSource в массив
ary = Split(Me.ListItems.RowSource, ";")
'заменяем все значения в выделенных элементах на " " (пробел)
For i = 0 To intCountSelItems ' цикл по выделенным элементам
For y = 0 To intCountFields - 1 ' цикл по столцам
ary(Me.ListItems.ItemsSelected(i) * intCountFields + y) = " "
Next
Next
' вытаскиваем RowSource из массива, заменив пробелы на пустые строки
Me.ListItems.RowSource = Replace(Join(ary, ";"), " ;", "")
End Sub


Вернуться в VBA

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 100

    TopList