2012-05-30 3 views
8

Я уверен, что это очень просто, но я не могу его найти. В закрытом случае формы доступа, как я могу отменить закрытие формы? У меня есть тест, который учитывает записи в таблице. Если в этой таблице есть записи, я хочу спросить у пользователя, хотят ли они закрыть или вернуться и работать с ними. Итак, как мне отменить событие закрытия?Как отменить форму закрытия в Close Event?

+4

Не редактируйте эту проблему, чтобы быть ответом! Это очень запутанно для кого-то, читающего то, что решило его для вас. Предоставление ошибочного кода и правильного кода отдельно - это одно решение. –

+0

Я считаю, что связанные формы MS-Access трудно контролировать. Не уверен, что думают разработчики! – NoChance

ответ

11

Вы можете использовать событие Unload:

GlobalVar ButtonClicked 

Private Sub Form_Open(Cancel As Integer) 
    ButtonClicked = False 
End Sub 

Private ClickMe_Click(Cancel As Integer) 
    ButtonClicked = True 
End Sub 

Private Sub Form_Unload(Cancel As Integer) 
    If Not ButtonClicked Then 
     Cancel = True 
    End if 
End Sub 

Order of events for database objects

+0

Я не уверен, что понимаю, должен ли я передать что-то в событие Form_Unload в закрытом случае? – MAW74656

+0

О, я вижу, поставьте тест в Form_unload и установите Cancel = True. http://msdn.microsoft.com/en-us/library/aa211464%28v=office.11%29.aspx – MAW74656

+1

Я добавил намного больше замечаний о том, как его использовать. – Fionnuala

0

исследование и попробовать этот код, он работал для меня. Замените нужные имена переменных на выбранные вами имена. Вставьте код в form_unload Событие вашей формы. ВНИМАНИЕ !!!: После выполнения этой операции вам будет трудно получить доступ к форме в области дизайна и верстки зрения

Private Sub Form_Unload(Cancel As Integer) 
     userresponse = MsgBox("Are you sure you want close? All your work wouldn't be saved", vbYesNo, "Database Information") 
     Select Case userresponse 
     Case 6 
      Cancel = False 
      'this line opens another form in my own case 
      DoCmd.OpenForm "EngMenu" 

     Case 7 
      Cancel = True 
      'this line keeps my own form open in my own case 
      DoCmd.OpenForm "UpdateForm" 


     Case Else: 

      MsgBox "You are not allowed to perform this operation", vbInformation, "Database Information" 
     End Select 
    End Subenter code here 
1

Используйте «Form_BeforeUpdate (отменить, как целое)» событие и установить отменить в True.

Обратите внимание, что вы просто не сможете закрыть вообще, если не добавить некоторую логику, чтобы фактически разрешить обновление базы данных.