2013-05-21 67 views
5

我是一個全新的n00bie在視覺c#和我遇到了一個奇怪的障礙,這是駕駛我瘋狂!這是有問題的代碼(是的,一個Hello World程序):如果在按鈕c#中的語句#

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 == 「再見殘酷的世界」;作爲if語句在編譯器中沒有錯誤的評估參數(按照我使用Visual Studio 2012 Ultimate的方式)

程序運行良好。我將textbox文本屬性初始化爲「Hello World!」使用VS的設計GUI。我面臨的問題是代碼只在用戶第一次單擊按鈕時起作用。任何時候按鈕沒有任何時間。

我調試了代碼,並確保在第一次用戶單擊按鈕時適當更改了文本框文本屬性。當用戶第二次點擊該按鈕(或之後的任何時間)時,一旦代碼到達if語句,它將跳過它,就好像對內部表達式的評估是FALSE一樣。實際上,跟上調試工具,按鈕只會繼續執行else塊內的代碼,即使我知道我正在使用的TextBox.Text屬性之前已被適當地更改過。

我在這裏丟失什麼?爲什麼按鈕只是在我硬編碼的兩個字符串之間切換文本框的文本值?

+5

拼寫錯誤。 ''Goodye Cruel World''你錯過了'b'。 – Yahya

+0

你在這裏缺少一個尖銳的眼睛。 –

+0

這就是爲什麼你應該總是爲這樣的事情使用一個'private const string'字段,而不是一遍又一遍地輸入字符串。 :) –

回答

8

您使用三個字符串,而不是兩個。 「Goodye Cruel World」不等於「再見殘酷的世界」。因此,你不能期望從這個源代碼中獲得任何種類的「字符串交換」行爲。

課程要求:不要在代碼的不同位置使用相同的字符串。相反,創建一個具有該值的常量字符串變量,然後在每次需要時使用它。例如代碼見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。有趣的是,他還需要使用HELLO來初始化他的按鈕,而不是再次輸入「Hello World!」。在GUI設計工具中。 –

2

檢查else條款中的Goodye的拼寫。條件將永遠是錯誤的。