2011-11-01 21 views
5

मेरे पास एक कस्टम बनाया गया संवाद Winform है। उस पर मेरे पास एक लेबल, टेक्स्टबॉक्स और 2 बटन हैं (ठीक है और रद्द करें)। यह ओवररालोड की घोषणा करता है और परिभाषित करता है विभिन्न पैरामीटर सूची पास करने के तरीकों को निष्पादित करता है।ShowDialog हमेशा DialogResult.Cancel क्यों देता है?

var theDialog := new InputMsgBox; 

if theInputB.Execute('Awesome StackOverflow','Enter Text?',s,var s) = DialogResult.OK then 
begin 
    Invalidate; 
    SetText(s); 
end; 

संवाद Winform निष्पादित पालन परिभाषित किया गया है:

संवाद Winform इस प्रकार कहा जाता है

method InputMsgBox.Execute(Title, theMessage, defaultanswer:string;var thevalue:string): DialogResult; 
begin 
    result := DialogResult.Cancel; 

    Requesttext.Text:=themessage; 
    Requesttext.Enabled:=true; 
    Requesttext.Visible:=true; 
    InputTextBox.Text:=defaultanswer; 
    InputTextBox.Enabled:=true; 
    InputTextBox.Visible:=true; 

    CancelBtn.Enabled:=true; 
    CancelBtn.Visible:=true; 
    Okbtn.Enabled:=true; 
    Okbtn.Visible:=true; 

    self.ShowDialog; 
    Result := self.DialogResult; 
    thevalue:=InputTextBox.Text; 
end; 

जब विधि पर अमल फोन करने वाले के लिए वापस लौट आता है, यह हमेशा DialogResult.Cancel भी जब रिटर्न आप OKBtn पर क्लिक करें।

बटन के संवाद के अनुसार सेट हैं।

मैंने संवाद Winform पर AcceptButton और CancelButton सेट किया है।

मुझे पता नहीं लगाया जा सकता है कि शोडियोलॉग विधि हमेशा डायलॉग रीसेट क्यों कर रही है। कैंसल।

अद्यतन कुछ परीक्षण करने के बाद, मुझे पता चला कि मेरी अन्य कस्टम-निर्मित संवाद विंडो शोडियलॉग = DialogResult.Ok को कॉल करके प्रदर्शित होने पर ठीक काम करती है। इसलिए, मैंने दोनों को यह देखने के लिए जांच की कि क्या उनके गुणों में कुछ अंतर हैं और बिल्कुल कोई फर्क नहीं पड़ता है। मुझे समझ में नहीं आता अग्रिम धन्यवाद,

उत्तर

8

मुझे मेरी समस्या का पता चला। यही कारण है कि संवाद फ़ॉर्म हमेशा रद्द संवाद संवाद वापस लौटा दिया। मेरी कस्टम-निर्मित संवाद विंडो के लिए, मैंने Form_Closing ईवेंट विधि भी कार्यान्वित की। जाहिर है, आपके पास कोई ऐसा ईवेंट नहीं है जो ShowDialog विधि का उपयोग करके संवाद खोलते समय प्रोग्राम काउंटर को अपने चरणों से बाहर कर देगा। इसलिए, इसे डायलॉग रिसेट पढ़ने का मौका मिलने से पहले ही बंद कर दिया गया था। इसलिए, मेरे प्रोग्राम ने केवल मेरे संवाद विंडो के लिए डिफ़ॉल्ट संवाद लॉग देखा।

एक बार जब मैंने Form_Closing ईवेंट विधि को हटा दिया, तो यह जिस तरह से माना जाता है, वैसे ही काम कर रहा है।

प्रश्न हटाने के बजाय, मैं इसका उत्तर दे रहा हूं और मुझे लगता है कि इससे दूसरों की मदद मिलेगी।

5

आप एक अलग DialogResult स्थापित करना चाहिए - उदाहरण के लिए, अपने AcceptButton की DialogResult संपत्ति की स्थापना द्वारा DialogResult.OK करने के लिए।

या इसे प्रोग्राम ईवेंट रूप से सेट करें, अक्सर बटन ईवेंट हैंडलर में।

मुझे लगता है कि DialogResult.Cancel डिफ़ॉल्ट है, और आप इसे कभी नहीं बदल रहे हैं।

+0

@ जो आप इसे क्लिक करते समय डायलॉग रीसेट फॉर्म सेट करने वाले बटन में से एक नहीं है? मेरे पास OKBtn बटन (AcceptButton) DialogResult.Ok पर सेट है और CancelBtn बटन (CancelButton) DialogResult.Cancel पर सेट है। मैं एमएसडीएन पुस्तकालय के माध्यम से चला गया है और उनके उदाहरण का पालन किया है। फिर भी, यह हमेशा DialogResult.Cancel देता है। – ThN

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