2009-01-28 24 views
34

ठीक है, यह मुझे परेशान कर रहा है, और मैं सिर्फ यह नहीं समझ सकता कि क्या गलत है ...WinForms AcceptButton काम नहीं कर रहा है?

मैंने दो रूप बनाए हैं। जो है कि Form2, उस पर दो बटन है

using (Form2 f = new Form2()) 
{ 
    if (f.ShowDialog() != DialogResult.OK) 
     MessageBox.Show("Not OK"); 
    else 
     MessageBox.Show("OK"); 
} 

दूसरा,: सबसे पहले प्रपत्र बस पर एक साधारण बटन है, जो एक संवाद इतने तरह के रूप में अन्य खोलता है। मैंने जो कुछ किया है, वह फॉर्म AcceptButton को सेट करना है, और दूसरे को रद्द करें बटन। मेरे सिर में यह सब कुछ है जो इस काम को करने के लिए जरूरी है। लेकिन जब मैं इसे चलाता हूं, तो मैं उस बटन पर क्लिक करता हूं जो फॉर्म 2 खोलता है। अब मैं CancelButton के रूप में एक सेट पर क्लिक कर सकता हूं, और मुझे "ठीक नहीं है" संदेश बॉक्स मिलता है। लेकिन जब मैं AcceptButton के रूप में एक सेट पर क्लिक करता हूं, तो कुछ भी नहीं होता है? Form2 की InitializeComponent कोड इस तरह दिखता है:

private void InitializeComponent() 
{ 
    this.button1 = new System.Windows.Forms.Button(); 
    this.button2 = new System.Windows.Forms.Button(); 
    this.SuspendLayout(); 
    // 
    // button1 
    // 
    this.button1.Location = new System.Drawing.Point(211, 13); 
    this.button1.Name = "button1"; 
    this.button1.Size = new System.Drawing.Size(75, 23); 
    this.button1.TabIndex = 0; 
    this.button1.Text = "button1"; 
    this.button1.UseVisualStyleBackColor = true; 
    // 
    // button2 
    // 
    this.button2.DialogResult = System.Windows.Forms.DialogResult.Cancel; 
    this.button2.Location = new System.Drawing.Point(130, 13); 
    this.button2.Name = "button2"; 
    this.button2.Size = new System.Drawing.Size(75, 23); 
    this.button2.TabIndex = 1; 
    this.button2.Text = "button2"; 
    this.button2.UseVisualStyleBackColor = true; 
    // 
    // Form2 
    // 
    this.AcceptButton = this.button1; 
    this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); 
    this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 
    this.CancelButton = this.button2; 
    this.ClientSize = new System.Drawing.Size(298, 59); 
    this.Controls.Add(this.button2); 
    this.Controls.Add(this.button1); 
    this.Name = "Form2"; 
    this.Text = "Form2"; 
    this.Load += new System.EventHandler(this.Form2_Load); 
    this.ResumeLayout(false); 
} 

मैं और की तुलना में उन दो बटन जोड़ने के लिए, और AcceptButton और CancelButton सेट कुछ भी नहीं किया है। यह क्यों काम नहीं करता है?

उत्तर

52

बस AcceptButton/CancelButton की स्थापना पर DialogResult सेट करने का प्रयास पर्याप्त नहीं है। यह सिर्फ बताता है कि पर कौन सा बटन लगाया जाना चाहिए/एएससी दर्ज करें। आपको बटन हैंडलर में DialogResult सेट करना होगा।

+13

क्या अजीब बात यह है कि CancelButton को वास्तव में उस बटन के डायलॉग रीसेट को रद्द करने के लिए सेट करता है, लेकिन स्वीकृति बटन उस बटन के लिए ऐसा नहीं करता है। – Carl

+0

आहा। धन्यवाद!! यह वास्तव में मुझे गड़बड़ कर दिया, हाहा। आप बिल्कुल सही थे। रद्द करें बटन को अपना संवाद रद्द करने के लिए सेट किया गया था, लेकिन दूसरा नहीं था। उस संवाद संपत्ति के बारे में बिल्कुल नहीं सोचा था ... ओह ठीक है। धन्यवाद फिर से :) – Svish

+3

संवाद परिणाम रद्द करने के लिए सेट है क्योंकि इसका डिफ़ॉल्ट मान –

47

button1

this.button1.DialogResult = System.Windows.Forms.DialogResult.OK; 
+3

मुझे आपके उत्तर को स्वीकृत उत्तर से बेहतर पसंद है क्योंकि आप वास्तव में निर्दिष्ट करने की आवश्यकता है। (भ्रम बटन 1 बनाम बटन 2 के अलावा :-) – RenniePet

0

मैं AcceptButton के साथ कोई समस्या नहीं काम कर रहा था और जब तक DialogResult सुझाव ठीक का हिस्सा था, मैं 2 अन्य चीजें हैं जो बदलने के लिए की जरूरत थी:

  1. मेरे बटन दिखाई नहीं देती थी - क्योंकि मैं चाहता था जानबूझ "डिंग" को रोकने के लिए जब एक कैरिज रिटर्न बारकोड स्कैन करके "दबाया गया" था।
  2. कंटेनर जिसमें बटन अंदर था, एक फर्क पड़ता था। मुझे इसे एक ही कंटेनर में रखना था, मेरे मामले में एक फॉर्म। पैनेल, टेक्स्टबॉक्स के रूप में जो इसे एक्सेस करने का प्रयास कर रहा था। मुझे यकीन नहीं है कि इससे कोई फर्क क्यों पड़ेगा, लेकिन ऐसा हुआ।

मुझे उम्मीद है कि यह किसी की मदद करेगा।

0

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

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