Форма Visual Basic .close() метод

У меня есть приведенный ниже фрагмент кода:

'Handle level specific properties
Select Case ScoreCard.CurrentDifficulty
    Case 1
        intImageCount = 2 'This is the number of images to show at any given time on screen +1

        'debug
        ScoreCard.CurrentDifficulty = 6
    Case 2
        intImageCount = 3 'This is the number of images to show at any given time on screen +1
    Case 3
        intImageCount = 5 'This is the number of images to show at any given time on screen +1
    Case 4
        intImageCount = 2  'This is the number of images to show at any given time on screen +1
    Case 5
        intImageCount = 5 'This is the number of images to show at any given time on screen +1
    Case 6
        frmLevel3_HouseOfMirrors.Show()
        Me.Close()
        Return
End Select

Когда выполняется case 6, выполняется frm3_HouseOfMirrors.Show(), и открывается моя новая форма. Me.close тоже выполняется, но моя проблема в том, что скрипт затем попадает в строку возврата. Разве me.Close() не останавливает выполнение всего кода в текущей форме и не выгружает себя из памяти?


person Dean    schedule 22.02.2013    source источник


Ответы (3)


Просто вызовите frmLvl3_HouseOfMirrors.ShowDialog() вместо .Show(), это остановит выполнение кода, пока новая форма не будет закрыта.

Или, если вы хотите отменить выполнение остальной части кода, попробуйте Выход. Вы должны обнаружить, что хотите закончить, и добавить его вне этого Sub, потому что .Close() не остановило выполнение кода.

person SysDragon    schedule 22.02.2013
comment
@ Деан Хм? Вы удаляете ответ как правильный. Не работал на вас? Нужно что-нибудь еще? - person SysDragon; 22.02.2013
comment
Привет, Просто вижу это сейчас. Это частично работает. Проблема в том, что после выполнения открытое диалоговое окно возвращается в главное окно и продолжает выполнение кода, а не полностью закрывает предыдущую форму. Кажется, он просто приостанавливает выполнение, что не идеально для моей ситуации. Любые другие предложения? - person Dean; 26.02.2013
comment
@DeAn Вы пробовали с инструкцией Exit? Вы можете выйти из функции, цикла или приложения. Поместите его после Me.Close: например, Exit Sub - person SysDragon; 26.02.2013
comment
Exit Sub, за которым следует Return, избыточны, у них одинаковая функция. - person Konrad Rudolph; 26.02.2013

Нет, метод close просто закрывает форму, но выполнение программы продолжится. Если вы хотите остановить выполнение кода до тех пор, пока форма не будет закрыта, вы можете сделать ее модальной.

В VBA это будет выглядеть так: frmLevel3_HouseOfMirrors.Show vbModal

person Ben    schedule 22.02.2013

Разве me.Close() не останавливает выполнение всего кода в текущей форме и не выгружает себя из памяти?

Нет. Close делает именно то, что говорит: он закрывает визуальное интерактивное представление формы.1 Это не влияет на выполнение кода напрямую. Однако он действительно обеспечивает вызов Form_Closing, а затем Form_Closed. Но выполнение остального кода не затрагивается; в частности, текущий метод проходит нормально. После этого другие методы формы могут вызываться или не вызываться по мере необходимости (и, как уже упоминалось, Closing и Closed будут вызываться).


1 И да, он освобождает ресурсы формы, если только форма не была показана через ShowDialog, а не через обычный Show.

person Konrad Rudolph    schedule 26.02.2013