2016-01-25 5 views
0

У меня есть 2 формы в моем проекте. Пользователи не могут выйти из первой, frmOptometry. У меня это реализовано таким образом:Как закрыть первую форму?

Private Sub frmOptometry_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing 
    MessageBox.Show("You can only close the application from the receipt screen!") 
    e.Cancel = True 
End Sub 

Вторая форма, с которой можно выйти из frmReceipt. Я его реализовать так:

Private Sub frmReceipt_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing 
    If MessageBox.Show("Are you sure you want to quit?", 
         "Obi-Wan Optometry Closing", 
         MessageBoxButtons.YesNo, 
         MessageBoxIcon.Exclamation) = 
        DialogResult.No Then 
     e.Cancel = True 
    Else 
     frmOptometry.Close() 
    End If 
End Sub 

Прямо сейчас, это не закрывает программу полностью, потому что она идет к frmOptometry_FormClosing и предотвращает его. Что мне делать, чтобы это исправить? Есть ли все равно, чтобы выяснить, где пользователь пытается закрыть программу, а затем решить оттуда?

+1

Вы можете изменить приложение, чтобы закрыть, когда последняя форма закрывается. Также не нужно спрашивать «Вы уверены, что хотите уйти?» особенно с ИСКЛЮЧЕНИЕМ! - это происходит с того времени, когда потребовалось 4-7 минут для загрузки Lotus 1-2-3 с 5-дюймовых дискет. Если ваше приложение так долго загружается, отредактируйте его – Plutonix

+0

Он не спрашивал о Lotus ... Также говорит, что ему не нужно спрашивать, хочет ли пользователь бросить, здесь совсем неважно ... Просто несколько мыслей, как ни один из то, что вы упомянули, относится к его прямому вопросу ... – Codexer

+0

@Codexer: Предоставление рекомендаций с помощью комментариев вполне уместно. Поскольку это конкретное руководство не затрагивало вопрос пользователей, его не предоставляли в качестве ответа. –

ответ

0

Один из способов решить это путем введения flag (скажем, под названием FromReceipt), который указывает, кто просит frmOptometry закрыть себя.

Нечто подобное на frmOptometry будет делать:

Public FromReceipt As Boolean = False 'Add this 
Private Sub frmOptometry_FormClosing(sender As Object, e As FormClosingEventArgs) Handles MyBase.FormClosing 
    If Not FromReceipt Then 'add this condition 
     MessageBox.Show("You can only close the application from the receipt screen!") 
     e.Cancel = True 
    End If 
End Sub 

А потом на frmReceipt:

Private Sub frmReceipt_FormClosing(sender As Object, e As FormClosingEventArgs) Handles MyBase.FormClosing 
    If MessageBox.Show("Are you sure you want to quit?", 
         "Obi-Wan Optometry Closing", 
         MessageBoxButtons.YesNo, 
         MessageBoxIcon.Exclamation) = 
        DialogResult.No Then 
     e.Cancel = True 
    Else 
     frmOptometry.FromReceipt = True 'Add this line to tell the frmOptometry: this time you can really close it 
     frmOptometry.Close() 
    End If 
End Sub 
+0

Спасибо! Мне удалось решить проблему, и я решил использовать флаг перед тем, как вы ответили. Я занят и не возвращался сюда только сейчас. (К сожалению: /) Я ценю ваш ответ! – kellyS723

Смежные вопросы