2013-01-17 15 views
6

ठीक है में प्रपत्र बंद करने के लिए कैसे है, तो एक Windows Forms वर्ग, WindowSettings, और फार्म एक "रद्द करें" बटन है। जब उपयोगकर्ता बटन पर क्लिक करता है, तो संवाद संवाद सेटिंग्स सेटिंग्स पॉप-अप हो जाएंगे और उपयोगकर्ता से पूछें कि क्या वह निश्चित है कि वह कार्रवाई करना चाहता है। संवाद में 2 बटन हैं, एक "हां" -बटन और "नहीं" -बटन। यदि उपयोगकर्ता "हां" -बटन पर क्लिक करता है, तो मैं डायलॉगसेटिंग कैंसल और विंडो सेटिंग्स दोनों को बंद करना चाहता हूं।सी #

DialogSettingsCancel में मेरे button_Click ईवेंट हैंडलर:

private void button1_Click(object sender, EventArgs e) 
{ 
    //Code to trigger when the "Yes"-button is pressed. 
    WindowSettings settings = new WindowSettings(); 
    this.Close(); 
    settings.Close(); 
} 

जब मैं अपने आवेदन चलाने के लिए, और सेटिंग्स प्रपत्र पर जाएँ, और "रद्द करें" बटन क्लिक करें, और फिर क्लिक करें "हाँ" बटन, केवल FlashSettingsCancel विंडो सेटिंग्स को बंद किए बिना बंद हो जाता है।

यह क्यों काम नहीं करेगा?

मैं भी

settings.Close(); 
this.Close(); 

लेकिन फिर भी एक ही परिणाम के लिए

this.Close(); 
settings.Close(); 

बदलते कोशिश की है।

+1

आपकी "सेटिंग्स" को पहले स्थान पर कभी नहीं दिखाया जा सकता है, तो शायद आप कुछ अन्य उदाहरण –

+0

ढूंढ रहे हैं ऐसा इसलिए होता है क्योंकि आप 'विंडो' को बंद कर रहे हैं जो कि अन्य विंडो को बंद करने से पहले क्लिक ईवेंट को संभालने वाला है '। यह एक फॉर्म क्लास नहीं है यह एक 'विंडो' वर्ग बड़ा अंतर है। इसके अलावा सेटिंग्स विंडो सेटिंग्स के उदाहरण के बराबर नहीं है, यह कुछ पूरी तरह से अलग उदाहरण के बराबर है। वीएस डीबगर का प्रयोग करें। –

उत्तर

6

आप WindowSettings कि खुला, नहीं एक नया एक है की वास्तविक उदाहरण की जरूरत है।

वर्तमान में, आप WindowSettings का एक नया उदाहरण बना रहे हैं और उस पर Close पर कॉल कर रहे हैं। यह कुछ भी नहीं करता है क्योंकि वह नया उदाहरण कभी नहीं दिखाया गया है।

इसके बजाए, DialogSettingsCancel दिखाते समय WindowSettings का वर्तमान उदाहरण माता-पिता के रूप में सेट करें।

कुछ इस तरह:

WindowSettings में:

private void showDialogSettings_Click(object sender, EventArgs e) 
{ 
    var dialogSettingsCancel = new DialogSettingsCancel(); 
    dialogSettingsCancel.OwningWindowSettings = this; 
    dialogSettingsCancel.Show(); 
} 

DialogSettingsCancel में:

public WindowSettings OwningWindowSettings { get; set; } 

private void button1_Click(object sender, EventArgs e) 
{ 
    this.Close(); 
    if(OwningWindowSettings != null) 
     OwningWindowSettings.Close(); 
} 

यह दृष्टिकोण पर ध्यान देता है कि एक DialogSettingsCancel संभावित खोला जा सकता है माता पिता के रूप में एक WindowsSettings बिना ।

WindowSettings में:

private void showDialogSettings_Click(object sender, EventArgs e) 
{ 
    var dialogSettingsCancel = new DialogSettingsCancel(this); 
    dialogSettingsCancel.Show(); 
} 

DialogSettingsCancel में:

WindowSettings _owningWindowSettings; 

public DialogSettingsCancel(WindowSettings owningWindowSettings) 
{ 
    if(owningWindowSettings == null) 
     throw new ArgumentNullException("owningWindowSettings"); 

    _owningWindowSettings = owningWindowSettings; 
} 

private void button1_Click(object sender, EventArgs e) 
{ 
    this.Close(); 
    _owningWindowSettings.Close(); 
} 
+0

बहुत बहुत धन्यवाद :) – Spookbuster

5
new WindowSettings(); 

आपने बस उस फ़ॉर्म का एक नया नया उदाहरण बंद कर दिया जो पहले स्थान पर दिखाई नहीं दे रहा था।

आपको इसे मूल फ़ॉर्म के उदाहरण को एक निर्माता पैरामीटर के रूप में स्वीकार करके और इसे फ़ील्ड में संग्रहीत करके बंद करने की आवश्यकता है।

2

आपका अपनी सेटिंग्स के उदाहरण को बंद करने

दो हमेशा जुड़े रहे हैं, तो आप के बजाय एक निर्माता पैरामीटर का उपयोग करना चाहिए इसे बनाने के ठीक बाद खिड़की।आपको सेटिंग विंडो पहले प्रदर्शित करने की आवश्यकता है और फिर एक संवाद परिणाम की प्रतीक्षा करें। अगर यह रद्द के रूप में वापस आता है तो विंडो बंद करें। उदाहरण के लिए:

private void button1_Click(object sender, EventArgs e) 
{ 
    Settings newSettingsWindow = new Settings(); 

    if (newSettingsWindow.ShowDialog() == DialogResult.Cancel) 
    { 
     newSettingsWindow.Close(); 
    } 
} 
0

DialogSettingsCancel के निर्माता के पैरामीटर के रूप में WindowSettings भेजने और फिर button1_Click पर जब हाँ दबाया जाता है उन दोनों के पास विधि कॉल।

public class DialogSettingsCancel 
{ 
    WindowSettings parent; 

    public DialogSettingsCancel(WindowSettings settings) 
    { 
     this.parent = settings;   
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     //Code to trigger when the "Yes"-button is pressed. 
     this.parent.Close(); 
     this.Close(); 
    } 
} 
2

फॉर्म को बंद करने के लिए DialogResult विधि का उपयोग क्यों नहीं करें?

if(DialogSettingsCancel.ShowDialog() == DialogResult.Yes) 
{ 
    this.close(); 
} 

इसके लिए हालांकि काम करने के लिए आप अपने "WindowSettings" फ़ॉर्म के अंदर यह करने के लिए की आवश्यकता होगी, जबकि आप DialogSettingsCancel रूप कहते हैं। वैसे ही आप OpenFileDialog, या किसी अन्य संवाद फ़ॉर्म को कॉल करेंगे।

1

तुम भी अनुप्रयोग को बंद कर सकते हैं:

Application.Exit();

यह प्रक्रियाओं को समाप्त होगा।