2013-05-21 16 views
5

Sono un nuovissimo n00bie in visual C# e mi sono imbattuto in uno strano ostacolo che mi sta facendo impazzire !! Ecco il codice in questione (sì, un programma Ciao Mondo):se le istruzioni nei pulsanti 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"); } 


     } 



    } 
} 

Ho anche cercato di usare textBox1.Text == "Goodbye Cruel World"; come parametro di valutazione per la dichiarazione if che non ottiene errori nel compilatore (dal modo in cui utilizzo Visual Studio 2012 Ultimate)

Il programma funziona correttamente. Ho initalizzato la proprietà textbox text come "Hello World!" utilizzando la GUI di design di VS. Il problema che sto affrontando è che il codice funziona solo la prima volta che l'utente fa clic sul pulsante. Ogni volta dopo che il pulsante NON fa NIENTE.

Ho eseguito il debug del codice e mi sono assicurato che la proprietà del testo della casella di testo fosse cambiata correttamente la prima volta che l'utente fa clic sul pulsante. Quando l'utente fa clic sul pulsante una seconda volta (o in qualsiasi momento dopo quello per quello) una volta che il codice raggiunge l'istruzione if, lo salta, come se la valutazione dell'espressione all'interno fosse FALSE. In effetti, mantenendo lo strumento di debug, il pulsante continua a eseguire solo il codice all'interno del blocco else, anche se so per certo che la proprietà TextBox.Text con cui sto lavorando è stata opportunamente modificata in precedenza.

Cosa mi manca qui ??? Perché il pulsante non cambia solo il valore del testo della casella di testo tra le due stringhe che ho codificato?

+5

errore di ortografia. '"Goodye Cruel World"' ti sei perso 'b' in esso. – Yahya

+0

Qui manca un occhio acuto. –

+0

Questo è il motivo per cui dovresti sempre usare un singolo campo 'private const string' per cose come questa invece di digitare la stringa più e più volte. :) –

risposta

8

Si utilizzano tre stringhe, non due. "Goodye Cruel World" non è uguale a "Goodbye Cruel World". Quindi, non ci si può aspettare alcun tipo di comportamento di "scambio di stringhe" da questo codice sorgente.

Lezione per imparare: Non utilizzare la stessa stringa in punti diversi del codice. Invece, crea una variabile stringa costante che ha quel valore, e poi usalo ogni volta che ne hai bisogno. Per esempio codice vedi Habib's answer.

7

Questo è un caso di definire costante stringa nel codice:

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); } 
    } 
} 

Se si utilizza la stessa stringa in più posti quindi è meglio se si definisce come un const e l'uso che ovunque nel codice, questo ti aiuterà a ridurre errori come quello che hai ora (Goodye è Goodbye) ed è anche più facile da cambiare/mantenere.

+2

+1. Un'aggiunta interessante sarebbe che ha bisogno di usare HELLO anche per inizializzare il suo pulsante, invece di digitare di nuovo "Hello World!" nello strumento di progettazione GUI. –

2

Verificare l'ortografia di Goodye nella clausola else. La condizione sarà sempre falsa.

Problemi correlati