2013-05-21 38 views
5

Tôi là một n00bie hoàn toàn mới trong visual C# và tôi gặp phải một trở ngại kỳ lạ đang thúc đẩy tôi Điên cuồng !! Đây là mã được đề cập (có, một chương trình Hello World):nếu các câu lệnh trong các nút 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"); } 


     } 



    } 
} 

Tôi cũng đã cố gắng sử dụng textBox1.Text == "Goodbye Cruel World"; như tham số đánh giá cho câu lệnh if không nhận được lỗi trong trình biên dịch (bằng cách tôi đang sử dụng Visual Studio 2012 Ultimate)

Chương trình chạy tốt. Tôi initalised tài sản văn bản textbox là "Hello World!" bằng cách sử dụng GUI thiết kế của VS. Vấn đề tôi phải đối mặt là mã chỉ hoạt động lần đầu tiên người dùng nhấp vào nút. Bất cứ lúc nào sau khi nhấn nút NOTHING.

Tôi đã sửa mã và tôi đảm bảo rằng thuộc tính văn bản hộp văn bản được thay đổi một cách thích hợp trong lần đầu tiên người dùng nhấp vào nút. Khi người dùng nhấp vào nút lần thứ hai (hoặc bất kỳ lúc nào sau đó đối với vấn đề đó) khi mã được chuyển đến câu lệnh if nó bỏ qua nó, như thể việc đánh giá biểu thức bên trong là FALSE. Trong thực tế, theo kịp với công cụ gỡ lỗi, nút tiếp tục thực thi chỉ mã trong khối khác, mặc dù tôi biết thực tế rằng thuộc tính TextBox.Text mà tôi đang làm việc với đã được thay đổi một cách thích hợp trước đây.

Tôi đang thiếu gì ở đây ??? Tại sao nút này không chuyển giá trị văn bản hộp văn bản giữa hai chuỗi mà tôi đã mã hóa cứng bên trong?

+5

lỗi chính tả. '' Goodye Cruel World '' bạn bỏ lỡ 'b' trong đó. – Yahya

+0

Bạn đang thiếu một con mắt sắc nét ở đây. –

+0

Đây là lý do tại sao bạn nên luôn luôn sử dụng một trường 'private const string' duy nhất cho những thứ như thế này thay vì nhập chuỗi lặp đi lặp lại. :) –

Trả lời

8

Bạn đang sử dụng ba chuỗi chứ không phải hai. "Goodye Cruel World" không bằng "Goodbye Cruel World". Do đó, bạn không thể mong đợi bất kỳ loại "trao đổi chuỗi" hành vi nào từ mã nguồn này.

Bài học để tìm hiểu: Không sử dụng cùng một chuỗi tại các điểm khác nhau trong mã của bạn. Thay vào đó, hãy tạo một biến chuỗi không đổi có giá trị đó, và sau đó sử dụng nó mỗi khi bạn cần nó. Ví dụ mã xem Habib's answer.

7

Đó là một trường hợp xác định chuỗi liên tục trong mã của bạn:

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

Nếu bạn đang sử dụng cùng một chuỗi ở nhiều nơi sau đó nó tốt hơn nếu bạn định nghĩa nó như là một const và sử dụng ở khắp mọi nơi trong mã của bạn, điều này sẽ giúp bạn giảm các lỗi giống như lỗi hiện tại của bạn (GoodyeGoodbye) và việc thay đổi/bảo trì cũng dễ dàng hơn.

+2

+1. Một sự bổ sung thú vị là anh ta cần sử dụng HELLO để khởi tạo nút của mình, thay vì gõ lại "Hello World!" trong công cụ thiết kế GUI. –

2

Kiểm tra chính tả Goodye trong mệnh đề khác. Điều kiện sẽ luôn là sai.

Các vấn đề liên quan