2013-05-21 9 views
5

मैं दृश्य सी # में एक नया नया n00bie हूं और मैं एक अजीब बाधा में भाग गया जो मुझे क्रॉजी चला रहा है !! यहाँ प्रश्न में कोड (हाँ, एक नमस्ते विश्व कार्यक्रम) है:यदि बटनों में कथन सी #

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows.Forms; 

namespace WindowsFormsApplication1 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void button1_Click(object sender, EventArgs e) 
     { 


      if (textBox1.Text.Equals("Goodbye Cruel World")) 
      { 
       textBox1.Text = ("Hello World!"); 

      } 
      else { textBox1.Text = ("Goodye Cruel World"); } 


     } 



    } 
} 

मैं भी textBox1.Text == "अलविदा क्रूर दुनिया" का उपयोग करने की कोशिश की; अगर कथन के लिए मूल्यांकन पैरामीटर को संकलक में कोई त्रुटि नहीं मिल रही है (जिस तरह से मैं विजुअल स्टूडियो 2012 अल्टीमेट का उपयोग कर रहा हूं)

प्रोग्राम ठीक चलता है। मैंने टेक्स्टबॉक्स टेक्स्ट प्रॉपर्टी को "हैलो वर्ल्ड" के रूप में initalized किया! वीएस के डिजाइन जीयूआई का उपयोग करना। जिस समस्या का सामना कर रहा हूं वह यह है कि कोड केवल पहली बार काम करता है जब उपयोगकर्ता बटन पर क्लिक करता है। बटन के बाद किसी भी समय कुछ नहीं करता है।

मैंने कोड डीबग किया और मैंने यह सुनिश्चित किया कि उपयोगकर्ता द्वारा बटन पर क्लिक करने पर पहली बार टेक्स्टबॉक्स टेक्स्ट प्रॉपर्टी उचित रूप से बदल दी जाए। जब उपयोगकर्ता बटन को दूसरी बार (या उसके बाद किसी भी समय उस समय क्लिक करता है) कोड को अगर कथन पर जाता है तो यह उसे छोड़ देता है, जैसे कि अभिव्यक्ति का मूल्यांकन गलत है। वास्तव में, डीबग टूल को बनाए रखने के साथ, बटन केवल अन्य ब्लॉक के भीतर कोड निष्पादित करता रहता है, भले ही मैं इस तथ्य के बारे में जानता हूं कि TextBox.Text प्रॉपर्टी जिसके साथ मैं काम कर रहा हूं, पहले उचित रूप से बदला गया है।

मुझे यहां क्या याद आ रही है ??? बटन दो स्ट्रिंग्स के बीच टेक्स्टबॉक्स टेक्स्ट वैल्यू को क्यों स्विच करता है जो मैंने हार्डकोड किया है?

+5

वर्तनी गलती। '' गुडी क्रूर वर्ल्ड "'आप इसमें' बी 'चूक गए। – Yahya

+0

आप यहां एक तेज आंख खो रहे हैं। –

+0

यही कारण है कि आपको स्ट्रिंग टाइप करने के बजाए इस तरह की चीजों के लिए हमेशा एक 'निजी कॉन्स स्ट्रिंग' फ़ील्ड का उपयोग करना चाहिए। :) –

उत्तर

8

आप तीन तारों का उपयोग कर रहे हैं, दो नहीं। "गुडी क्रूर वर्ल्ड" "अलविदा क्रूर वर्ल्ड" के बराबर नहीं है। इसलिए, आप इस स्रोत कोड से किसी भी प्रकार के "स्ट्रिंग स्वैपिंग" व्यवहार की अपेक्षा नहीं कर सकते हैं।

सीखने के लिए सबक: अपने कोड के विभिन्न बिंदुओं पर एक ही स्ट्रिंग का उपयोग न करें। इसके बजाए, एक स्थिर स्ट्रिंग वेरिएबल बनाएं जिसमें वह मान हो, और उसके बाद इसे हर बार उपयोग करें। उदाहरण के लिए कोड Habib's answer देखें।

7

स्ट्रिंग अपने कोड में लगातार परिभाषित करने का एक मामला है कि:

public partial class Form1 : Form 
{ 
    private const string GOODBYE = "Goodbye Cruel World"; 
    private const string HELLO = "Hello World!"; 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     if (textBox1.Text.Equals(GOODBYE)) 
     { 
      textBox1.Text = HELLO; 

     } 
     else { textBox1.Text = (GOODBYE); } 
    } 
} 

आप को कई जगहों पर एक ही स्ट्रिंग उपयोग कर रहे हैं तो इसके बेहतर आप एक const के रूप में यह परिभाषित करने और उपयोग करने वाले हर जगह अपने कोड में है, यह आपके पास अब (GoodyeGoodbye) जैसी त्रुटियों को कम करने में आपकी सहायता करेगा और इसे बदलने/बनाए रखना भी आसान है।

+2

+1। एक दिलचस्प जोड़ यह होगा कि उसे "हैलो वर्ल्ड!" टाइप करने के बजाय, अपने बटन को प्रारंभ करने के लिए हेल्लो का उपयोग करने की भी आवश्यकता है। जीयूआई डिजाइनर उपकरण में। –

2

अन्य खंड में गूडी की वर्तनी जांचें। स्थिति हमेशा झूठी होगी।

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