Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.52/25: Рейтинг темы: голосов - 25, средняя оценка - 4.52
nnn
1

RunTime Error 340 Control array element 'item' doesn't exist

31.08.2006, 13:08. Показов 5205. Ответов 15
Метки нет (Все метки)

Имеется массив элементов А(I). Пользователь может удалить любой элемент из этого массива. Нужно после операции удаления отсортировать этот массив, но в цикле по I при достижении индекса удалённого элемента появляется ошибка RunTime Error 340 Control array element 'item' doesn't exist. Можно ли каким-либо образом удалённый элемент не рассматривать, чтобы обойти данную ошибку?

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
31.08.2006, 13:08
Ответы с готовыми решениями:

Не работает справка: MSDN collection doesn't exist
в VB6 не работает help. Пишет, что MSDN collection doesn't exist. Понятно, что надо идти на...

Проблемы с компиляцией ActiveX: Sub Main() doesn't exist
Здравствуйте Проблема при компиляции UserControl - ругается: Sub Main() doesn't exist Для...

Error Code: 1146. Table doesn't exist
Описал процедуру: DROP PROCEDURE IF EXISTS insertColumn; DELIMITER // CREATE PROCEDURE...

Mysql error 1146 table doesn't exist в MySQL Workbench 8.0 CE
Здравствуйте ребят! Возникла следующая проблема, создал я таблицу под транзакции, ввел данные...

15
2 / 2 / 1
Регистрация: 18.10.2007
Сообщений: 1,749
31.08.2006, 14:42 2
код в студию.
0
nnn
31.08.2006, 14:59 3
Имеется две формы. На одной из них (PerZZ) - CommandButton's, а в качестве рисунков на них - элементы ActiveX. На другую форму (Titul) при нажатии соответствующей кнопки на PerZZ должен переноситься соответствующий элемент ActiveX. При этом кнопка на PerZZ становится неактивной.
При удалении ActiveX-а с Titul-а кнопка должна становиться активной. Но нужна проверка. Её и пытаюсь реализовать...
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    If Titul.TitPerZZ.Count > 1 Then
    
        For I = 1 To Titul.TitPerZZ.Count - 1
                 
                If Titul.TitPerZZ(I).Visible = True Then 'здесь выдаёт ошибку
                    For J = LBound(PZZ) To UBound(PZZ)
                        If PerZZ1(J + 1).NumberZN = Titul.TitPerZZ(I).NumberZN Then
                            PerZZ1(J + 1).Enabled = False
                            Command1(J + 1).Enabled = False
                        End If
                    Next J
                End If
           
        Next I
    End If
2 / 2 / 1
Регистрация: 18.10.2007
Сообщений: 1,749
31.08.2006, 15:13 4
Скинь на mailto:alexey@vbrussian.com alexey@vbrussian.com исходник.
По всей видимости, достаточно проверять на IsNothing.
0
nnn
31.08.2006, 16:33 5
Что-то у меня в VB v.6 нет такой функции - IsNothing - ошибку выдаёт "Sub или Function не определены".
Исходник - большой, всё в разных местах понапихано, не знаю, как прислать.
2 / 2 / 1
Регистрация: 18.10.2007
Сообщений: 1,749
31.08.2006, 16:41 6
Открой Object Browser и посмотри функции, начинающиеся на Is. IsNull, IsEmpty и т.д.
А еще, не ленись, погугли. Там много на эту тему.
0
nnn
31.08.2006, 17:40 7
Нашли текст функции isNothing. Всё равно, не работает. Ту же 340-ю ошибку выдаёт.
Единственное, что могу сказать, удаление элемента с Titul-a сделано через Unload...
2 / 2 / 1
Регистрация: 18.10.2007
Сообщений: 1,749
31.08.2006, 18:06 8
Как я понимаю, у вас ситуация, покажая на эту:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Private Sub Command2_Click()
Dim a(1 To 3)
Dim i As Integer
For i = 1 To 3
    Load Command1(i)
    Command1(i).Top = 0
    Command1(i).Left = i * Command1(i).Width
    Command1(i).Caption = "Button " & i
    Command1(i).Visible = True
Next
End Sub
Private Sub Command3_Click()
MsgBox Command1(2).Caption
Unload Command1(2)
MsgBox Command1(2).Caption
End Sub
Предпоследняя строка вызовет вашу ошибку.
Самый простой вариант - сделать отлов ошибки при помощи On Error. Или написать функцию, которая опять же через On Error будет проверять. Вот здесь наглядный тому пример:
http://bbs.vbstreets.ru/viewtopic.php?p=61949 http://bbs.vbstreets.ru/viewtopic.php?p=61949
0
nnn
31.08.2006, 18:14 9
По поводу функции IsNothing: в vb6 такой нет, в инете нашли:
Visual Basic
1
2
3
4
5
Public Function IsNothing(pvar As Variant)
    On Error Resume Next 'Handle errors here
    IsNothing = (pvar Is Nothing)
    On Error GoTo 0 'Reset error handling
End Function
Т.е. отлов ошибки через "On error" как бы происходит. Только положительного результата нет... Вот.
2 / 2 / 1
Регистрация: 18.10.2007
Сообщений: 1,749
31.08.2006, 18:30 10
Почитайте, наконец, ссылку, которую я Вам дал.
Там четко описано и про Is Nothing и про требуемую функцию.
0
5 / 5 / 3
Регистрация: 17.10.2007
Сообщений: 1,119
31.08.2006, 18:36 11
nnn,
На самом деле синтаксис неверен. Нужно Is Nothing. Например:
If ТвойКонтрол Is Nothing Then
VladConn
A, я смотрю, в чьей-то ф-ции IsNothing есть пример верного использования Is Nothing.
0
2 / 2 / 1
Регистрация: 18.10.2007
Сообщений: 1,749
31.08.2006, 18:41 12
VladConn, в данном случае ты не прав.
Дело в том, что конструкция Is Nothing даже для выгруженных контролов в Control Array'e возвращает False. Посмотри ссылку.
0
5 / 5 / 3
Регистрация: 17.10.2007
Сообщений: 1,119
31.08.2006, 19:34 13
Почему это я неправ? По-моему, Alexey Spirin рекомендовал Is Nothing, причем без пробела, на что (и только на это) было обращено мое внимание, поскольку отсутствие пробела повело, судя по-всему, спрашивающего по совсем ложному пути.
;0))
0
2 / 2 / 1
Регистрация: 18.10.2007
Сообщений: 1,749
31.08.2006, 19:51 14
Виноват-виноват, пробел просутил, не спорю)
Однако в данном случае все равно дело не в Is Nothing. Is Nothing в данном случае не подходит. Просто изначально понятно не было, о каком именно случае идет речь.
0
5 / 5 / 3
Регистрация: 17.10.2007
Сообщений: 1,119
31.08.2006, 20:25 15
Да, конечно.
Я сейчас в отпуске, так что активно не буду наверно участвовать.
VladConn
0
WitC
07.10.2006, 23:51 16
UBound(arrayname[, dimension]) - Возвращает число Long, содержащее максимально возможный индекс массива arrayname указанной размерности. Если вам не всё понятно, то смотрите пример.
Пример:
DimUpper
Visual Basic
1
2
3
4
5
Dim MyArray(1 To 10, 5 To 15, 10 To 20) ' Объявляем массивы
Dim AnyArray(10)
Upper = UBound(MyArray, 1) ' Возвратит 10.
Upper = UBound(MyArray, 3) ' Возвратит 20.
Upper = UBound(AnyArray) ' Возвратит 10.
Т.е.
Visual Basic
1
2
3
4
5
6
7
dim a as integer 
...
for i=1 to UBound(MyArray)
     a=a+1
next i
text1.text=a
...
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.10.2006, 23:51

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Microsoft VBScript runtime error '800a01b6' Object doesn't support this property or method: 'Server.Transfer'
Получил сообщение: Microsoft VBScript runtime error '800a01b6' Object doesn't support this...

Error: array type has incomplete element type
в функции выдает ошибку \arifm.c|4|error: array type has incomplete element type| подправьте...

Table 'auto.avto' doesn't exist
Привет всем форумчанинам, очень нуждаюсь в вашей помощи! Через консоль создал базу данных под...

Table 'autoparts.aspnetusers' doesn't exist
Описание: Необработанное исключение при выполнении текущего веб-запроса. Изучите трассировку стека...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.