2012-03-27 11 views
5

में फॉर्मक्लोसिंग ईवेंट मेरे पास एक ही विंडोज़ फॉर्म एप्लिकेशन है जो सिस्टम ट्रे आइकन में चल रहा है। यदि उपयोगकर्ता विंडोज़ के एक्स बटन दबाते हैं तो संदेशबॉक्स हां और नहीं (हां) के साथ प्रदर्शित होता है -> फॉर्म को बंद करें --- नहीं-> सिस्टम ट्रे आइकन में चल रहे फॉर्म को रखें)। मैं जब वहाँ पहले से ही एक उदाहरण तो चल रहा है मैं इस कोड का इस्तेमाल किया है तब होता है जब उपयोगकर्ता आवेदन का एक और उदाहरण खोलने के परिदृश्य को रोकने के लिए सोच रहा था:आवेदन। एक्स्टिट() और Vb.net

If Process.GetProcessesByName(Process.GetCurrentProcess.ProcessName).Length> 1 Then 
MessageBox.Show("Another instance is running", "Error Window", MessageBoxButtons.OK, 
    MessageBoxIcon.Exclamation) 
    Application.Exit() 
End If 

समस्या यह है कि जब मैं इस संदेश को परीक्षण करना चाहते हैं प्रदर्शित होता है लेकिन जब मैं ठीक दबाता हूं, तो एक नया संदेशबॉक्स प्रकट होता है (वह निजी उप फॉर्म_फॉर्मक्लोसिंग से एक है)। यदि मैं नहीं चुनता तो मुझे उदाहरण चलाना होगा! मैंने उस एप्लिकेशन को पढ़ लिया है। एक्स्टिट फॉर्म_फॉर्म क्लोजिंग इवेंट को निकाल देता है।

क्या Form_FormClosing ईवेंट की ट्रिगरिंग को रद्द करने की कोई संभावना है, या क्या मैं कुछ गलत कर रहा हूं?

'इस formclosing प्रक्रिया

Private Sub Form_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing 
    Try 
     Dim response As MsgBoxResult 
     response = MsgBox("Are you sure you want to exit", CType(MsgBoxStyle.Question + MsgBoxStyle.YesNo, MsgBoxStyle), "Confirm") 

     'If the user press Yes the application wil close 
     'because the application remains in taskmanager after closing i decide to kill the current process 
     If response = MsgBoxResult.Yes Then 
      Process.GetCurrentProcess().Kill() 
     ElseIf response = MsgBoxResult.No Then 
      e.Cancel = True 
      Me.WindowState = FormWindowState.Minimized 
      Me.Hide() 
      NotifyIcon1.Visible = True 
     End If 

पुनश्च है: मैं नहीं एक प्रोग्रामर तो मेरे साथ कठोर हो नहीं करते कृपया :)

उत्तर

5

आप मौजूदा प्रक्रिया को मारने या End वक्तव्य उपयोग करने की आवश्यकता नहीं है। यदि आपको इनका उपयोग करना है तो आपके आवेदन के साथ कुछ ख़राब है।

जब आप अपने आवेदन को समाप्त करना चाहते हैं तो Me.Close का उपयोग करें। Make Single Instance Application

+0

उत्तर के लिए धन्यवाद ... मुझे विजुअल स्टूडियो प्रॉपर्टीज से सेटिंग मिली है, यह इस विधि का उपयोग करने के लिए भी ठीक होना चाहिए ...दुर्भाग्य से मैंने प्रबंधित नहीं किया क्यों मेरा आवेदन बंद होने के बाद टास्क मैनेजर से बंद नहीं हुआ ... यही कारण है कि मुझे यह अस्थायी समाधान मिल गया .... मूल रूप से एप्लिकेशन एक साधारण विंडोज़ फॉर्म है। – Operagust

1

स्थिति में जहाँ आप सिर्फ अपने आवेदन शुरू कर रहे हैं हूँ और पिछले उदाहरणों के लिए परीक्षण कर रहे हैं मैंने आवेदन को समाप्त करने के लिए VB End कथन का उपयोग किया है।

समाप्ति बयान कोड निष्पादन बंद हो जाता है अचानक, और आह्वान नहीं करता निपटान या विधि, या किसी अन्य Visual Basic कोड को अंतिम रूप दें। ऑब्जेक्ट अन्य कार्यक्रमों द्वारा आयोजित संदर्भों को अमान्य कर दिया गया है। यदि एक एंड कथन किसी कोशिश या कैच ब्लॉक के भीतर सामना किया जाता है, तो नियंत्रण संबंधित अंतराल ब्लॉक तक नहीं पहुंचता है।

If Process.GetProcessesByName(Process.GetCurrentProcess.ProcessName).Length> 1 Then 
    MessageBox.Show("Another instance is running", "Error Window", MessageBoxButtons.OK,   MessageBoxIcon.Exclamation) 
    End 
End If 
+0

महान से प्रयोक्ता द्वारा बंद कर दिया है आवेदन बंद हो जाएगा आप बहुत बहुत धन्यवाद, मैं इसे बदल दिया है और यह काम किया। – Operagust

1
Private Sub main_master_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing 
If e.CloseReason = CloseReason.UserClosing Then 
'Put you desired Code inside this! 
Msgbox("Application Closing from Taskbar") 
End If 
End Sub 

को

Private Sub Form1_FormClosing(sender As Object, e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing 
    Select Case MessageBox.Show("Are you sure you want to exit?", "Confirm", MessageBoxButtons.YesNo, MessageBoxIcon.Question) 
     Case Windows.Forms.DialogResult.Yes 
      'nothing to do here the form is already closing 
     Case Windows.Forms.DialogResult.No 
      e.Cancel = True 'cancel the form closing event 
      'minimize to tray/hide etc here 
    End Select 
End Sub 

उपयोग विकल्प चलने से अपने आवेदन के एक से अधिक प्रतिलिपि को रोकने के लिए यह टास्कबार से exe ​​ बंद या मार डालेगा: यह FormClosing ईवेंट सक्रिय करेगा प्रक्रिया। यदि उपयोगकर्ता टास्कबार से एप्लिकेशन बंद करें।

CloseReason.UserClosing 

घटना है, अगर यह Taskber