2011-01-31 13 views
5

मैं उपयोगकर्ता को Winforms एप्लिकेशन में एक फॉर्म विंडो बंद करते समय डेटा सहेजने के लिए संकेत देता हूं। मैं उपयोगकर्ता को प्रॉम्प्ट ट्रिगर करने का तरीका नहीं समझ सकता, क्या उन्हें फ़ॉर्म के ऊपरी दाएं कोने में लाल बॉक्स पर क्लिक करना चाहिए।एक Winforms अनुप्रयोग में विंडो बंद घटनाएं

मेरे आवेदन में वर्तमान में एक बुलियन ध्वज है, जो टेक्स्टchanged ईवेंट पर True पर सेट है। इसलिए मुझे केवल लाल बॉक्स द्वारा ट्रिगर होने वाली किसी भी घटना में बूलियन मान की जांच करने की आवश्यकता होगी।

कोई सलाह?

उत्तर

11

आप FormClosing event संभाल करने की जरूरत है। यह ईवेंट बंद होने के ठीक पहले उठाया गया है, भले ही उपयोगकर्ता ने टाइटल बार में या किसी अन्य माध्यम से "एक्स" बटन पर क्लिक किया हो।

चूंकि घटना से पहले उठाया है प्रपत्र बंद कर दिया है, तो यह अवसर प्रदान करता है पास घटना को रद्द करने के। e पैरामीटर में आपको FormClosingEventArgs कक्षा का एक उदाहरण पारित किया गया है। e.Cancel property को सही पर सेट करके, आप लंबित बंद ईवेंट को रद्द कर सकते हैं।

उदाहरण के लिए:

Private Sub Form_Closing(ByVal sender As Object, ByVal e As FormClosingEventArgs) 
    If Not isDataSaved Then 
     ' The user has unsaved data, so prompt to save 
     Dim retVal As DialogResult 
     retVal = MessageBox.Show("Save Changes?", YesNoCancel) 
     If retVal = DialogResult.Yes Then 
      ' They chose to save, so save the changes 
      ' ... 
     ElseIf retVal = DialogResult.Cancel Then 
      ' They chose to cancel, so cancel the form closing 
      e.Cancel = True 
     End If 
     ' (Otherwise, we just fall through and let the form continue closing) 
    End If 
End Sub 
+0

अवहेलना OnFormClosing बजाय मैं सी # आशा के लिए इस कोड को implent की जरूरत है। E.CloseReason पर ध्यान दें। –

5

आप प्रपत्र के OnFormClosing विधि ओवरराइड हैं, तो आप उपयोगकर्ता कि परिवर्तन करने के पश्चात सूचित करने के लिए मौका है, और प्रपत्र बंद करने को रद्द करने का अवसर है।

यह ईवेंट आपको FormClosingEventArgs उदाहरण प्रदान करता है जिसमें CloseReason संपत्ति है (जो आपको बताती है कि फ़ॉर्म क्यों बंद हो रहा है) साथ ही एक रद्द संपत्ति, जिसे आप बंद करने से रोकने के लिए सही पर सेट कर सकते हैं।

5

तो यह उपयोगी करने के लिए आप

protected override void OnFormClosing(FormClosingEventArgs e) 
      {    
       base.OnFormClosing(e); 
       if (PreClosingConfirmation() == System.Windows.Forms.DialogResult.Yes) 
       { 
        Dispose(true); 
        Application.Exit(); 
       } 
       else 
       { 
        e.Cancel = true; 
       } 
      } 

     private DialogResult PreClosingConfirmation() 
     { 
      DialogResult res = System.Windows.Forms.MessageBox.Show(" Do you want to quit?   ", "Quit...", MessageBoxButtons.YesNo, MessageBoxIcon.Question); 
      return res; 
     }