if按钮中的语句c#

时间:2013-05-21 10:01:54

标签: c# c#-4.0

我是一个全新的n00bie in visual c#,我遇到了一个奇怪的障碍,让我疯狂!这是有问题的代码(是的,Hello World程序):

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)

程序运行正常。我将文本框文本属性初始化为“Hello World!”使用VS的设计GUI。我面临的问题是代码仅在用户第一次单击按钮时才起作用。按钮没有任何时候。

我调试了代码,并确保在用户第一次单击按钮时适当更改了文本框文本属性。当用户第二次(或在此之后的任何时间)点击该按钮时,一旦代码到达if语句,它就会跳过它,就好像其中的表达式的评估是FALSE一样。实际上,为了跟上调试工具,按钮仍然只执行else块中的代码,即使我知道我正在使用的TextBox.Text属性之前已经适当更改了。

我在这里失踪了什么?为什么按钮只是在我硬编码的两个字符串之间切换文本框文本值?

3 个答案:

答案 0 :(得分:8)

您使用的是三个字符串,而不是两个字符串。 “古德耶残酷世界”不等于“再见残酷世界”。因此,您不能指望从此源代码中进行任何类型的“字符串交换”行为。

要学习的课程:不要在代码的不同位置使用相同的字符串。相反,创建一个具有该值的常量字符串变量,然后在每次需要时使用它。例如,代码见Habib's answer

答案 1 :(得分: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 :(得分:2)

检查else子句中 Goodye 的拼写。这种情况总是错误的。