На форме находится ListBox и Button "Удалить строку".
При загрузке формы массив заполняется данными из файла, затем все передается в ListBox.
Потом хочу удалить какую-нибудь строку из массива и обновить ListBox. Нашел где-то на сайте функцию ShrinkArray и вставил к себе в прогу. После 2-3 удалений возникает обозначенная ошибка. Если удалить 1 строку, программа просто зависает, а потом и закрывается.
Помогите пожалуйста, может че не так вставил.
- Код: Выделить всё
Private Declare Sub CopyMemory _
Lib "KERNEL32" Alias "RtlMoveMemory" ( _
ByVal Destination As Long, _
ByVal Source As Long, _
ByVal Length As Long)
Private Declare Sub ZeroMemory _
Lib "KERNEL32" Alias "RtlZeroMemory" ( _
ByVal Destination As Long, _
ByVal numBytes As Long)
Private Sub Command6_Click()
Dim i As Integer
Dim mes
mes = ShrinkArray(String_array, List1.ListIndex)
List1.Clear
For i = 0 To UBound(String_array)
List1.AddItem (String_array(i))
Next
End Sub
Private Function ShrinkArray(ByRef nArr() As String, ByVal nIndex As Long)
If UBound(nArr) = nIndex Then
ReDim Preserve nArr(nIndex - 1)
Else
If nIndex < LBound(nArr) Or nIndex > UBound(nArr) Then
Err.Raise 10, , "Откуда такой индекс?"
Else
nArr(nIndex) = vbNullString
CopyMemory VarPtr(nArr(nIndex)), VarPtr(nArr(nIndex + 1)), (UBound(nArr) - nIndex) * LenB(nArr(0))
ZeroMemory VarPtr(nArr(UBound(nArr))), LenB(nArr(0))
ReDim Preserve nArr(UBound(nArr) - 1)
End If
End If
End Function