2013-03-14 47 views
7

Tôi đang cố gắng thay đổi văn bản của Nút mỗi khi được nhấp.Thay đổi văn bản nút sau khi nhấp, sau đó thay đổi lại sau khi nhấp lại

Nút Bắt đầu là "BẬT". Khi tôi nhấp vào nó lần đầu tiên nó sẽ thay đổi thành "OFF", và khi tôi nhấp lại vào nó, nó sẽ thay đổi trở lại On.

Tôi hiểu cách thay đổi thành "TẮT" khi được nhấp, nhưng tôi không chắc chắn về cách kiểm tra nhấp chuột phụ để tôi có thể thay đổi văn bản thành "BẬT".

Đây là mã của tôi cho đến nay:

private void OrdersButton_Click(object sender, EventArgs e) 
{ 
     OrdersButton.Text = " Turn Orders Off"; 
} 

Trả lời

7

Hãy thử

private void OrdersButton_Click(object sender, EventArgs e) 
    { 
     if (OrdersButton.Text == "Turn Orders On") 
     { 
      OrdersButton.Text = "Turn Orders Off"; 
     } 
     else if (OrdersButton.Text == "Turn Orders Off") 
     { 
      OrdersButton.Text = "Turn Orders On"; 
     } 
    } 

Hope this helps.

3

Chỉ cần kiểm tra các văn bản hiện hành:

OrdersButton.Text = OrdersButton.Text.EndsWith("Off") ? "Turn Orders On" : "Turn Orders Off"; 

Edit: Theo Cody chỉ ra trong ý kiến ​​dưới đây, điều đó không làm việc tốt với địa phương hóa. Đối với một cái gì đó mà có thể dễ dàng được định vị sử dụng ViewState (giả định các văn bản ban đầu là để biến đơn đặt hàng trên):

bool ordersWereOn = (ViewState["OrdersAreOn"] as bool?) ?? false; 
ViewState["OrdersAreOn"] = !ordersWereOn; 
OrdersButton.Text = ordersWereOn ? "Turn Orders On" : "Turn Orders Off"; 
+0

Lưu ý rằng điều này đang sử dụng toán tử [inline-if] (http://en.wikipedia.org/wiki/%3F :). Chỉ là FYI. 1 cho gọn gàng một lót. – aqua

+1

Nó có thể là một lớp lót gọn gàng, nhưng cách tiếp cận này rơi phẳng trên khuôn mặt của nó ngay khi bạn bản địa hóa giao diện người dùng. –

+0

@Cô rất đúng, trả lời cập nhật để giải quyết vấn đề đó. – MattW

10

tôi có thể thấy một số vấn đề có thể với điều đó và có thể cung cấp một hướng đối tượng giải pháp hơn: Thêm một tài sản mà theo dõi những hiện tại "nhà nước":

private bool _IsOn; 

    public bool IsOn 
    { 
     get 
     { 
      return _IsOn; 
     } 
     set 
     { 
      _IsOn = value; 
      OrdersButton.Text = _IsOn ? "On" : "Off"; 
     } 
    } 

và sử dụng các xử lý sự kiện chỉ đơn giản là chuyển đổi tài sản:

private void OrdersButton_Click(object sender, EventArgs e) 
{ 
    IsOn = !IsOn; 
} 

bằng cách đó nó dễ dàng hơn để truy cập vào các thông tin sau này và bạn có thể dễ dàng thay thế on/off với bất cứ điều gì mà bạn thích - thậm chí toàn cầu hóa/địa phương hóa nó nếu cần thiết. Tôi nghĩ rằng đó là một thực hành lập trình rất xấu để có mã phụ thuộc vào văn bản trên màn hình ...

EDIT: Ngoài ra, sẽ không sử dụng hộp kiểm hoặc nút chuyển đổi có ý nghĩa hơn? Khác với biểu diễn trực quan khác biệt, nó làm những gì bạn muốn ra khỏi hộp ...

+1

+1 và đã đồng ý với chỉnh sửa của bạn. Chuyển đổi các nút thay đổi chú thích của họ là các ví dụ khét tiếng về thiết kế * bad * vì chúng gây nhầm lẫn cho người dùng. Rất khó để biết trạng thái nào là hiện tại và cái nào bạn đang chuyển sang — điều mà nút đó nói hoặc điều nó * không * nói. Một hộp kiểm đến nay là lựa chọn tốt hơn. Và hãy nhớ rằng chú thích hộp kiểm hầu như luôn luôn được diễn đạt một cách tích cực để tránh tạo ra âm kép. Thông tin thêm về vấn đề này có thể được tìm thấy trên trang web Hỏi & Đáp của chúng tôi. Cụ thể là: http://ux.stackexchange.com/questions/1318/ –

1

Vui lòng tạo một nút đơn giản. Nhấp đúp vào nút và mã sau sẽ tự động được tạo.

Viết Mã đơn giản này và chạy nó .....

Và Xem kỳ diệu Nó thực sự là gonna làm việc ......

private void button5_Click(object sender, EventArgs e) 

{ 
    if (button5.Text == "Pause") 
    { 
     button5.Text = "Resume"; 
     label1.Text = "Yes Pause"; 
    } 
    else 
    { 
     button5.Text = "Pause"; 

     label1.Text = "Yes Resume"; 
    } 
} 

Hãy làm bạn có bất kì thắc mắc vui lòng liên hệ tôi ....

Số liên lạc: 9096713970 ...

0

Có rất nhiều cách để thực hiện việc này.
Đối với tôi, tôi có lẽ sẽ sử dụng Tag thuộc tính của Control vì:

  1. Nó đang được lưu trữ trong biến của một nút.Bạn không cần bất kỳ biến bên ngoài
  2. Tất cả các mã có thể được viết bằng một phương pháp duy nhất
  3. Bạn luôn có thể truy cập nó từ các phương pháp khác \ khiển

Đây là đoạn mã ví dụ:

private void OrdersButton_Click(object sender, EventArgs e) 
{ 
    bool value = (OrdersButton.Tag as bool?) ?? true; 
    OrdersButton.Tag = !value; 

    OrdersButton.Text = "Turn Orders " + (value ? "On" : "Off"); 
} 

Bạn cũng có thể đặt giá trị mặc định Tag (đúng hoặc sai) và xóa kiểm tra giá trị rỗng. Bạn cũng sẽ luôn luôn có thể làm truy cập nó theo cách này:

public void DoSomeImportantThings() 
{ 
    var areOrdersTurnedOn = (bool)OrdersButton.Tag; 
} 

Nó không phải là phương pháp tốt nhất - nó chỉ là một số khác.
Ví dụ: Roman Gruber đã hiển thị, có thể là câu trả lời hay nhất bằng cách sử dụng các thuộc tính có logic thay đổi văn bản được đóng gói thành bộ đặt.

0
private void button4_Click(object sender, EventArgs e) 
{ 
    if (button4.Text == "Show Password") 
    { 
     textBox2.PasswordChar = '\0'; 
     button4.Text = "Hide Password"; 
    } 
    else 
    { 
     textBox2.PasswordChar = '*'; 
     button4.Text = "Show Password"; 
    } 
} 
+0

đây là những gì tôi đã làm .... –

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