2012-03-20 14 views
5

मैं शोडियलॉग का उपयोग करके एक मॉडल संवाद के रूप में एक फॉर्म खोलता हूं। बदले में यह संवाद शोडियलॉग का उपयोग करके एक मॉडल को फिर से एक संवाद संवाद के रूप में खोला जा सकता है।घोंसला वाले बच्चे संवाद को बंद करने से पैरेंट संवाद बंद हो जाता है?

जब सबसे निचला संवाद बंद हो जाता है, तो इससे इसके मूल संवाद भी बंद हो जाते हैं। ऐसा क्यों होता है और मैं इसे कैसे रोक सकता हूं?

मैंने इसे चित्रित करने के लिए समस्या का एक हैलो वर्ल्ड संस्करण बनाया है।

फॉर्म 1:

Form 1

private void OpenForm2Button_Click(object sender, EventArgs e) 
{ 
    Form2 testForm = new Form2(); 
    DialogResult dialogResult = new DialogResult(); 
    dialogResult = testForm.ShowDialog(); 
    MessageBox.Show("Form 2 returned: " + Convert.ToString(dialogResult)); 
} 

फार्म 2:

Form 2

... 
this.Form2OKButton.DialogResult = System.Windows.Forms.DialogResult.OK; 
this.Form2CancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; 
... 
this.AcceptButton = this.Form2OKButton; 
this.CancelButton = this.Form2CancelButton; 
... 
private void OpenForm3Button_Click(object sender, EventArgs e) 
{ 
    Form3 testForm = new Form3(); 
    DialogResult dialogResult = new DialogResult(); 
    dialogResult = testForm.ShowDialog(); 
    MessageBox.Show("Form 3 returned: " + Convert.ToString(dialogResult)); 
} 

फार्म 3:

Form 3

... 
this.Form3OKButton.DialogResult = System.Windows.Forms.DialogResult.OK; 
this.Form3CancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; 
... 
this.AcceptButton = this.Form3OKButton; 
this.CancelButton = this.Form3CancelButton; 

कदम पुन: पेश करने:

  • पर क्लिक करें "ओपन फॉर्म 2"
  • पर क्लिक करें "ओपन फॉर्म 3"
  • क्लिक करें "रद्द करें"

फॉर्म 3 के साथ बंद कर देता है DialogResult == अपेक्षित के रूप में रद्द करें, लेकिन फॉर्म 2 भी DialogResult == रद्द करें (अपेक्षित नहीं) के साथ बंद हो जाता है।

+0

Mmh काम करेंगे, मैंने कोशिश की है और यह [मेरे मशीन पर ठीक काम करता है] (http://codinghorror.typepad.com/.a/6a0120a85dcdae970b0128776ff992970c- pi)। हमें समस्या को समझने के लिए पूरे (वास्तविक) कोड को देखना चाहिए। कोड के लंबे टुकड़े पेस्ट करने के लिए आप http://pastebin.com/ का उपयोग कर सकते हैं ... – digEmAll

+0

मेरे लिए भी काम करता है। –

+0

मैंने यहां कोड चिपकाया है: http://pastebin.com/Dj81gAze –

उत्तर

14

संपादित करें:, OpenForm3Button_Click ईवेंट हैंडलर के अंत के बाद,

this.OpenForm3Button.DialogResult = System.Windows.Forms.DialogResult.Cancel; 

आप OpenForm3Button क्लिक करते हैं form.DialogResult स्वचालित रूप से सेट किया गया है:

समस्या यह एक (: Form2.Designer.cs फ़ाइल) है Cancel पर और यह बंद है।

OpenForm3Button की DialogResult संपत्ति रीसेट और यह उम्मीद के रूप में :)

+0

कोई विचार नहीं कि यह कैसे सेट हो गया। अजीब चीज यह है कि उसने मेरे मुख्य प्रोजेक्ट में ऐसा किया और मैंने जो भी दुनिया स्थापित किया है, वही दुनिया में वही काम किया। मैंने दोनों बार एक ही गलती की होगी। अब पूरी तरह से काम करता है। बहुत बहुत धन्यवाद। मैं अगली बार इस तरह की चीजों की तरह सावधानी बरतूँगा। –

+3

@WarrenBlumenow: यदि आपने पहले रद्द बटन जोड़ा है, और उसके बाद ओपन बटन बनाने के लिए इसे कॉपी किया है (CTRL-C या CTRL-mousedrag का उपयोग करके), पूर्व के सभी गुण बाद में कॉपी किए गए हैं। यह अक्सर होता है। :) – digEmAll

+1

ओह, वाह।ऐसा लगता है कि मेरे पास यह बग था क्योंकि मैंने पहले फ़ॉर्म पर एक रद्द बटन सेट किया था, और उसके बाद दूसरा बटन बनाने के लिए उस बटन की प्रतिलिपि बनाई थी। ऐसा प्रतीत होता है कि फॉर्म का रद्द करें बटन स्वचालित रूप से बटन के डायलॉग रिसेट को सेट करता है। जानकार अच्छा लगा। – Nyerguds

संबंधित मुद्दे