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
@DeAn Хм? Премахвате отговора като правилен. Не работи за вас? Трябва ли още нещо? - 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