2013-05-21 2 views
5

Я совершенно новый n00bie в visual C#, и я столкнулся с странным препятствием, которое заставляет меня CRAZY !! Вот код, о котором идет речь (да, программа 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. Проблема, с которой я сталкиваюсь, заключается в том, что код работает только при первом нажатии пользователем кнопки. В любое время после нажатия кнопки НИЧЕГО.

Я отладил код, и я убедился, что текстовое свойство текстового поля соответствующим образом изменено при первом нажатии пользователем кнопки. Когда пользователь нажимает кнопку второй раз (или в любое другое время после этого), как только код попадает в оператор if, он пропускает его, как если бы оценка выражения внутри FALSE. На самом деле, не отставая от инструмента отладки, кнопка продолжает выполнять только код внутри блока else, хотя я знаю, что свойство TextBox.Text, с которым я работаю, было соответствующим образом изменено ранее.

Что мне здесь не хватает ??? Почему кнопка просто не переключает текстовое значение текстового поля между двумя строками, которые я жестко запрограммировал?

+5

орфография ошибка. «Goodye Cruel World» вы пропустили «b» в нем. – Yahya

+0

У вас отсутствует острый глаз. –

+0

Вот почему вы всегда должны использовать одно поле 'private const string' для таких вещей, вместо того чтобы вводить строку снова и снова. :) –

ответ

8

Вы используете три строки, а не две. «Goodye Cruel World» не соответствует «Goodbye 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 и использовать его везде в вашем коде, это поможет вам уменьшить количество ошибок, подобных тому, которое у вас есть сейчас. (Goodye is Goodbye) и его также легче изменить/обслуживать.

+2

+1. Интересным дополнением было то, что он должен использовать HELLO для инициализации своей кнопки, вместо того, чтобы снова набирать «Hello World!». в GUI-дизайнере. –

2

Проверьте правописание Goodye в предложении else. Условие всегда будет ложным.

Смежные вопросы