Помогите найти ошибку

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

Помогите найти ошибку

Сообщение AntonGV » 31.07.2006 (Пн) 18:11

Надо удалить один элемент из середины массива. Делаю так, но почему-то не получается

Код: Выделить всё
Private Sub Del()
Dim i As Integer
  For i = 5 To UBound(myArray) - 1
     myArray(i) = myArray(i + 1)
  Next i
  ReDim Preserve myArray(UBound(myArray) - 1)
End Sub

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 31.07.2006 (Пн) 18:31

Вроде всё правильно. Моя телепатия подсказывет мне, что массив неправильно определяется.

Покажи как ты его объявляешь, и в каком месте кода.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

AntonGV
Бывалый
Бывалый
 
Сообщения: 234
Зарегистрирован: 24.05.2006 (Ср) 12:10
Откуда: г. Пермь

Сообщение AntonGV » 31.07.2006 (Пн) 18:44

Обьявляю в модуле
Public file() as String
в Sub Main() делаю ReDim File(0)

Потом так заполняю массив:

Код: Выделить всё
Private Sub List1_OLEDragDrop(Data As DataObject, Effect As Long, Button As Integer, Shift As Integer, X As Single, Y As Single)
On Error Resume Next
Dim Path As String
Dim tmp As String
Path = Data.Files(1)
If Path <> "" Then
tmp = UCase(Right(Path, 4))
If tmp = ".WMA" Or tmp = ".WAV" Or tmp = ".MP3"  _
   Then
      List1.AddItem fName(Path), List1.ListCount
      ReDim Preserve File(UBound(File) + 1)
      File(List1.ListCount - 1) = Path
   Else
      If tmp = ".LAP" Then
        'LoadList (Path)
      Else
        MsgBox "Неподдерживаемый формат файла", vbInformation
      End If
    End If
End If
End Sub


И так удаляю элементы массива

Код: Выделить всё
Private Sub delCount()
Dim i As Integer
List1.RemoveItem (List1.ListIndex)
For i = List1.ListIndex To UBound(File) - 1
   File(i) = File(i + 1)
Next i
ReDim Preserve File(UBound(File) - 1)
End Sub

Matew
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 894
Зарегистрирован: 28.06.2004 (Пн) 17:44
Откуда: Дальний Восток, г. Ха

Сообщение Matew » 01.08.2006 (Вт) 4:26

AntonGV, вот тебе красивый способ:
http://www.vbstreets.ru/VB/Articles/66160.aspx
Алкоголь и сканеры-ваши враги! Не верите-смотрите аватару :-)

AntonGV
Бывалый
Бывалый
 
Сообщения: 234
Зарегистрирован: 24.05.2006 (Ср) 12:10
Откуда: г. Пермь

Сообщение AntonGV » 02.08.2006 (Ср) 16:26

у меня всеравно не работает. Получается несоотвествие List`а и массива

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 02.08.2006 (Ср) 16:33

возможно проблема заключается в том, что в ListBox нумерация элементов начинается с 0, а в массиве по умолчанию скорее всего с 1.
Весь мир матрица, а мы в нем потоки байтов!

AntonGV
Бывалый
Бывалый
 
Сообщения: 234
Зарегистрирован: 24.05.2006 (Ср) 12:10
Откуда: г. Пермь

Сообщение AntonGV » 02.08.2006 (Ср) 16:44

Нет, в массиве нумерация начинается тоже с 0.

Вот исходник, там очень кривой код так что сильно не ругайтесь
Вложения
Player.rar
(62.88 Кб) Скачиваний: 43

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 02.08.2006 (Ср) 16:56

Открыл, добавил элементы в список. Поудалял Delet-ом. Всё работает.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

AntonGV
Бывалый
Бывалый
 
Сообщения: 234
Зарегистрирован: 24.05.2006 (Ср) 12:10
Откуда: г. Пермь

Сообщение AntonGV » 02.08.2006 (Ср) 17:09

А у меня начинает воспроизводиться уже удаленный файл :?

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 02.08.2006 (Ср) 17:10

AntonGV писал(а):И так удаляю элементы массива

Код: Выделить всё
Private Sub delCount()
Dim i As Integer
List1.RemoveItem (List1.ListIndex)
For i = List1.ListIndex To UBound(File) - 1
   File(i) = File(i + 1)
Next i
ReDim Preserve File(UBound(File) - 1)
End Sub




Мне видится что надоб, List1.RemoveItem (List1.ListIndex) поставить в конец.



Ибо, по моему после удаления выбранного итема из листа, Listindex будет невалиден.

AntonGV
Бывалый
Бывалый
 
Сообщения: 234
Зарегистрирован: 24.05.2006 (Ср) 12:10
Откуда: г. Пермь

Сообщение AntonGV » 02.08.2006 (Ср) 17:16

Точно у меня в другой проге порядок действий другой и все работает
И здесь заработало, только появилась куча других ошибок :(


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

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

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

    TopList  
cron