Существует ли объект на форме

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 30.09.2004 (Чт) 13:56

if text1(1) is nothing then
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Aleksej
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 191
Зарегистрирован: 03.06.2003 (Вт) 9:58

Сообщение Aleksej » 30.09.2004 (Чт) 13:57

Код: Выделить всё
Public Sub RebuildWindow(FormName As Form)
Dim Control As Control

For Each Control In FormName.Controls

        Debug.Print Control.Name

Next Control
End Sub

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 30.09.2004 (Чт) 15:02

В NET множественная обработка сделана не через control array, а через множественный Handles (либо AddHandler). Так что там этого .НЕТ...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 30.09.2004 (Чт) 15:04

GSerg писал(а):if text1(1) is nothing then

Э... Не будет работать :) text1(1) никогда не будет Nothing
Lasciate ogni speranza, voi ch'entrate.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 30.09.2004 (Чт) 15:05

Да???
Они что, неявно New? :roll:
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 30.09.2004 (Чт) 15:09

Не знаю :) Сдается мне, что с индексированными контролами в VB дело обстоит очень хитро.
Lasciate ogni speranza, voi ch'entrate.

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 30.09.2004 (Чт) 18:25

Вообще-то у Control Array есть спец. свойства:
Me.text1.LBound
Me.text1.UBound
Есессно, только для чтения. Правда, если ты начнешь выгружать контролы из середины массива... ХЗ, что тогда будет, не помню

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 30.09.2004 (Чт) 18:59

GSerg писал(а):Да???
Они что, неявно New? :roll:

Гм. Тут просто идея такая: когда ты вызываешь функцию Text1(1) <=> Text1.Item(1) функция сама проверяет, существует ли элемент и если не существые генерирует ошибку. По этому указанное выражение и не равно nothing. И это вообще не массив, а набор, с числовыми ключами.
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 30.09.2004 (Чт) 21:11

GSerg писал(а):Да???
Они что, неявно New? :roll:

А чёрт их поймёт...
Код: Выделить всё
Private Sub Form_Load()
Debug.Print Text1(1) Is Nothing 'False
Text1(1).Visible = True 'Run-time error '340': Control array element '1' doesn't exist
End Sub

Так что похоже на неявный New + до Load с ними всё равно работать нельзя.
Это всё афаик сделано для совместимости с VB3 и раньше, когда в языке ещё не было ООП-фич. Оттуда же "двойственность" формы как класса и глобального объекта.
Изображение

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 01.10.2004 (Пт) 10:47

ANDLL писал(а):Гм. Тут просто идея такая: когда ты вызываешь функцию Text1(1) <=> Text1.Item(1) функция сама проверяет, существует ли элемент и если не существые генерирует ошибку. По этому указанное выражение и не равно nothing. И это вообще не массив, а набор, с числовыми ключами.

Ошибки не будет. Я сам удивился, но факт налицо -- для Obj Is Nothine можно указывать несуществующий элемент массива.
Lasciate ogni speranza, voi ch'entrate.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 01.10.2004 (Пт) 13:54

alibek писал(а):
ANDLL писал(а):Гм. Тут просто идея такая: когда ты вызываешь функцию Text1(1) <=> Text1.Item(1) функция сама проверяет, существует ли элемент и если не существые генерирует ошибку. По этому указанное выражение и не равно nothing. И это вообще не массив, а набор, с числовыми ключами.

Ошибки не будет. Я сам удивился, но факт налицо -- для Obj Is Nothine можно указывать несуществующий элемент массива.

Будет-будет. ANDLL не про Is Nothing, а про доступ к свойству незагруженного контрола.
Изображение

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 01.10.2004 (Пт) 15:09

А... :)
Свойства это да, про них я забыл.
Кстати можно:
On Error ...
S=Text1(1).Name
If Err > 0 Then
On Error Goto 0
Lasciate ogni speranza, voi ch'entrate.

ta_gena
Бывалый
Бывалый
 
Сообщения: 264
Зарегистрирован: 30.10.2002 (Ср) 12:18
Откуда: Russia

Сообщение ta_gena » 02.10.2004 (Сб) 8:25

Лучше создать функцию типа:

Function ControlExists( ctrl As Control) As Boolean
Dim sTemp As String
On Error GoTo hErr
sTemp = ctrl.Name
ControlExists=True
Exit Function
hErr:
'Nothing doing
End Function


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

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

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

    TopList