Фича или баг?

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

Фича или баг?

Сообщение Чудик » 04.03.2005 (Пт) 18:45

В модуле формы располагаются процедуры для элемента List. Одна процедура на событие Click, вторая - на клик пункта меню. Во-второй имеется строка
Код: Выделить всё
    If Me.lstMakeOrder.Selected(i) = True Then Me.lstMakeOrder.Selected(i) = False

В первой
Код: Выделить всё
    If Me.lstMakeOrder.DataChanged = True Then ChooseSupplier

При выполнении условия из второй процедуры выполнение кода перескакивает на первую процедуру и выполняет ее. Причем после ее выполнения на продолжение второй не возвращается.
Почему такое и как это избежать? Я лично не доганяю.
Век живи - век учись!
www.detal-plast.narod.ru

Ruslan Demidow
Мужчина!
Мужчина!
Аватара пользователя
 
Сообщения: 987
Зарегистрирован: 25.03.2004 (Чт) 13:39
Откуда: N.Novgorod

Сообщение Ruslan Demidow » 05.03.2005 (Сб) 12:04

Чудик писал(а):В модуле формы располагаются процедуры для элемента List. Одна процедура на событие Click, вторая - на клик пункта меню. Во-второй имеется строка
Код: Выделить всё
    If Me.lstMakeOrder.Selected(i) = True Then Me.lstMakeOrder.Selected(i) = False

В первой
Код: Выделить всё
    If Me.lstMakeOrder.DataChanged = True Then ChooseSupplier

При выполнении условия из второй процедуры выполнение кода перескакивает на первую процедуру и выполняет ее. Причем после ее выполнения на продолжение второй не возвращается.
Почему такое и как это избежать? Я лично не доганяю.
Используй в первой процедуре (в первой по написанию в этом топике) булеву переменную-флаг. И если выполняется написаная тобой строка кода, то перед ней ставь флаг равным true.
А во второй проверяй этот флаг и если он установлен в true, тогда сбрасывай этот флаг в false и на выход из процедуры.
Т.е. код должен быть примерно таким
Код: Выделить всё
Dim bNotChange As Boolean
Option Explicit

'Вторая процедура
.....
   If Me.lstMakeOrder.Selected(i) = True Then
      bNotChange=True
        Me.lstMakeOrder.Selected(i) = False
   End if
   
'В первой
....
    If bNotChange Then
       bNotChange=False
       Exit Sub
    End if

    If Me.lstMakeOrder.DataChanged = True Then ChooseSupplier
Это Ж-ж-ж-ж неспроста (с) Винни-Пух

Чудик
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 639
Зарегистрирован: 06.07.2004 (Вт) 12:18
Откуда: г. Егорьевск

Сообщение Чудик » 06.03.2005 (Вс) 0:58

Как вариант, но проблема в том, что необходимо вернуться назад на тоже место, откуда произошел скачок (для продолжения процедуры).
Век живи - век учись!
www.detal-plast.narod.ru

Чудик
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 639
Зарегистрирован: 06.07.2004 (Вт) 12:18
Откуда: г. Егорьевск

Сообщение Чудик » 06.03.2005 (Вс) 12:54

Хорошо, я задам вопрос по-другому. Возможно ли использование метки в какой-либо процедуре в модуле формы, к которой можно было бы перейти из любой точки любой процедуры этого модуля.
Век живи - век учись!
www.detal-plast.narod.ru

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

Сообщение tyomitch » 06.03.2005 (Вс) 13:26

Чудик писал(а):Хорошо, я задам вопрос по-другому. Возможно ли использование метки в какой-либо процедуре в модуле формы, к которой можно было бы перейти из любой точки любой процедуры этого модуля.
Нет. Метки видимы только внутри одной процедуры.
Изображение


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

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

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

    TopList  
cron