Время жизни переменной имхо

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

B@mper
Обычный пользователь
Обычный пользователь
 
Сообщения: 80
Зарегистрирован: 01.04.2002 (Пн) 4:13
Откуда: Russia

Время жизни переменной имхо

Сообщение B@mper » 27.05.2003 (Вт) 15:36

Народ...ну застрял :((
Есть блок if-then...в нем объявляеца переменная...надо что бы по выходу из этого блока продолжала жить пока не наступит определенное чего-то там...

If тра-та-та Then
Dim frmU_info As New frmUserInformation
frmU_info.Show
End if

Ну так вот...окошечко пояфляица...а вот после Show идет выход из этого блока и тогда окошечно подвисает намертво...наррррод ну поможите же мне :(((

CREATOR
Новичок
Новичок
 
Сообщения: 29
Зарегистрирован: 26.03.2003 (Ср) 12:32

Сообщение CREATOR » 28.05.2003 (Ср) 4:08

:arrow: Воти ты на грабли встал ..... :D
Если переменная обьявлена в блоке, то вне его она жить не будет .. :cry: И в твоём случае тоже, обьяви её раньше
Код: Выделить всё
Dim frmU_info As frmUserInformation
If тра-та-та Then
frmU_info = New frmUserInformation
frmU_info.Show
End if


Так должно жить ..... :P

skiperski
Идеолог
Идеолог
Аватара пользователя
 
Сообщения: 1386
Зарегистрирован: 25.06.2002 (Вт) 15:52

Сообщение skiperski » 28.05.2003 (Ср) 12:35

Неправда ваша! Это не C++ и не Java. В VB переменные в процедурах/функциях могут быть объявлены где угодно, но до их использования и живут оне до выхода из процедуры/функции.
Простейший пример:
Код: Выделить всё
Public Function test()
   
    Dim x&
   
    For x = 0 To 10
        Dim y&
        y = x
    Next
   
    Debug.Print x, y
End Function

Immediate window:
Код: Выделить всё
test
11            10

Как видим, переменная y осталась жива после выхода из блока.

Так что проблема в чём-то другом. Надеюсь, ты вызываешь не модальную форму?
Вот такой код у меня работает:
Код: Выделить всё
Option Explicit

Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Private Sub Command1_Click()

    If True Then
        Dim frm2 As New Form2
        frm2.Show 'vbModal
        DoEvents
    End If
   
    Debug.Print 1123
   
    Sleep 1000
   
    frm2.Hide
    Unload frm2
   
End Sub

areh
Постоялец
Постоялец
 
Сообщения: 530
Зарегистрирован: 02.12.2002 (Пн) 12:28
Откуда: РОССИЯ, Салехард

Сообщение areh » 28.05.2003 (Ср) 14:12

2 skiperski: но дело тут не только в том, что это не С++, это ещё и не ВБ6! Здесь компилятор будет ругаться на такой код, да запустить это можно, но работать всёравно не будет! На сколько я понимаю тут вроде раздел по ВБ.НЕТ, так что я думаю не стоит постить в качестве советов код для ВБ 6, особенно учитывая то, что он просто напросто не совместим.

2 B@mper:

1. Если тебе надо её использовать только в функции, то делай как сказал CREATOR,

2. Если просто надо, чтобы пользователь с ней поработал и какие-то значения вернулись в функцию, то используй frm.ShowDialog, вместо простого Show.

ну и наконец, 3. Если тебя надо её использовать где угодно, то объяви её в модуле. А в блоке просто установи её как новый экземпляр, а если где-нить понадобиться узнать, была ли она объявлена то сравние её с Nothing, ну вот вроде бы и всё!

Удачи!

skiperski
Идеолог
Идеолог
Аватара пользователя
 
Сообщения: 1386
Зарегистрирован: 25.06.2002 (Вт) 15:52

Сообщение skiperski » 28.05.2003 (Ср) 14:51

areh писал(а):На сколько я понимаю тут вроде раздел по ВБ.НЕТ

АААААААААААААААААААА!!!!!!!!!!!!!!!!!
Предлагал же я уже сделать возможность полностью игнорировать или хоты цветом отмечать выбранные форумы. Вот снова наступил на старые грабли. Моя вина, не посмотрел на имя форума.

B@mper
Обычный пользователь
Обычный пользователь
 
Сообщения: 80
Зарегистрирован: 01.04.2002 (Пн) 4:13
Откуда: Russia

Сообщение B@mper » 29.05.2003 (Чт) 11:51

"Перцы вы не поняли...точнее я не так объяснил...у меня есть ф-ция, в которой мне надо показать форму и выйти из ф-ции...ну так вот...при выходе из ф-ции форме настает край...а мне надо что бы она жила всегда...формы надо создавать динамически...т.е. за пределами ф-ции их не создашь...ребят поможите плз...мыслей нету вовсе :))"
>Ну давай обьясняй что как там всмысле написать чё та

CREATOR
Новичок
Новичок
 
Сообщения: 29
Зарегистрирован: 26.03.2003 (Ср) 12:32

Сообщение CREATOR » 30.05.2003 (Пт) 7:45

:D Да геморой у тебя ........
Вроде всё растолковали здесь ....

Если я правлино понял, ты хочеш в динамике работать с массивом класса .... Так создай коллекцию ...., её обработку .....
Обьяви её глобально ..... А в соём коде добавляй новый экземпляр в коллекцию и работай с ним ..... :D

Удачи тебе ....


Вернуться в Visual Basic .NET

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

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

    TopList  
cron