2013-05-21 35 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的拼写。条件将永远是错误的。