Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Загадка ;) Добавлено: 08.10.04 02:01  

Автор вопроса:  Lister | ICQ: 298621256 
Как узнать, инициализирован ли массив типов MyType?

Type MyType
  String_1 As String
  String_2 As String
  String_3 As String
End Type

Dim tMT() As MyType

IsEmpty(tMT) здесь, естественно, не подходит.

Может в VB есть еще какая-нибудь функция?

Ответить

  Ответы Всего ответов: 7  

Номер ответа: 1
Автор ответа:
 war



ICQ: 288367795 

Вопросов: 7
Ответов: 15
 Профиль | | #1 Добавлено: 08.10.04 03:40
Проверь на возникновение ошибки
ТИПА
on error goto 1
a = MyType.string1
 ...
 ...
1

Ответить

Номер ответа: 2
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #2
Добавлено: 08.10.04 03:41
Никак. Оно не только с пользовательскими, а и с обычными типами не работает. Да и вообще VB ориентирован на Variant. Вот так:
Dim a As Variant
MsgBox IsArray(a)
a = Array("Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun";)
MsgBox IsArray(a)
Erase a
MsgBox IsArray(a)

Ответить

Номер ответа: 3
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #3
Добавлено: 08.10.04 03:47
Да нет, можно гораздо проще.
Private Initialized as Boolean
Sub RedimAray()
 if Initialized then
    Redim Array(Ubound(Array)+1)
 Else
    Initialized=True
    Redim Array(0)
 End If
End Sub

Ответить

Номер ответа: 4
Автор ответа:
 Lister



ICQ: 298621256 

Вопросов: 57
Ответов: 304
 Профиль | | #4 Добавлено: 08.10.04 03:50
А я вот что придумал:

Private Function ArrayIsEmpty(tMT() As MyType) As Boolean
  On Error Resume Next
  
  ArrayIsEmpty = (Len(CStr(UBound(tMT))) > 0)

End Function


Если массива нет, значит UBound вызовет ошибку и ArrayIsEmpty останется False

Если массив создан - True

Ответить

Номер ответа: 5
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #5
Добавлено: 08.10.04 04:30
 Дело в том, что массив в VB - это не обычная последовательность байт в памяти. Не, ну в конечном счете конечно - обычная последовательность. Но для неё ещё есть обёртка SAFEARRAY. И если какой то другой язык просто выделяет глобальную или локальную память, то VB создаёт массив посредством COM. И обращаясь к массиву он обращается не к адресу, а к этой обёртке. Как и всякий объект эта обёртка имеет логический номер (Handle). Если массив не инициализирован, то значит COM-массив ещё не создавался и хендл обёртки равен нулю. Вот тут он и генерирует тебе ошибку.

Ответить

Номер ответа: 6
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #6
Добавлено: 08.10.04 11:39
1.


Public Function usrUB(ByRef gArray() As gbUsers) As Long
    On Error Resume Next
    usrUB = &HFFFF
    usrUB = UBound(gArray)
End Function

[/code]

2.

[code]
Public Function usrUB(ByRef gArray() As MyType) As Long
    On Error GoTo err
    usrUB = UBound(gArray)
    Exit Function
err:
    usrUB = &HFFFF
End Function

Ответить

Номер ответа: 7
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #7
Добавлено: 08.10.04 11:40
Хе... ну и глюки ;)

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам