2013-03-14 13 views
7

Próbuję zmienić tekst przycisku za każdym kliknięciem.Zmień tekst przycisku po kliknięciu, a następnie zmień go po ponownym kliknięciu.

Przycisk Rozpoczyna jako "WŁ". Kiedy kliknę to po raz pierwszy, powinien zmienić się na "WYŁ", a kiedy kliknę ponownie, powinien się on zmienić z powrotem na Wł.

Rozumiem, jak zmienić go na "WYŁ." Po kliknięciu, ale nie jestem pewien, jak sprawdzić drugie kliknięcie, aby zmienić tekst z powrotem na "WŁ".

Oto mój kod do tej pory:

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

Odpowiedz

7

Spróbuj

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

nadzieję, że to pomaga.

3

Wystarczy sprawdzić aktualny tekst:

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

Edit: Jak Cody podkreśla w komentarzach poniżej, że nie działa dobrze z lokalizacji. Czegoś, co może być łatwiej miejscowego użytkowania ViewState (zakładając, że początkowy tekst jest włączenie zamówień on):

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

Należy zauważyć, że używa on operatora [inline-if] (http://en.wikipedia.org/wiki/%3F :). Po prostu dla FYI. +1 dla zgrabnej jednolinijki. – aqua

+1

To może być zgrabna jednolinijka, ale to podejście spada płasko na twarz zaraz po zlokalizowaniu interfejsu użytkownika. –

+0

@Cody bardzo prawdziwe, odpowiedź zaktualizowana, aby rozwiązać ten problem. – MattW

10

widzę kilka możliwych problemów z tym i może zaoferować więcej obiektowego rozwiązanie: Dodawanie właściwość, która śledzi aktualną „stan”:

private bool _IsOn; 

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

i korzystania z obsługi zdarzeń po prostu przełączyć własność:

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

w ten sposób łatwiej jest uzyskać dostęp do informacji na później i można łatwo zastąpić on/off z co chcesz - nawet globalizacji/zlokalizowanie go w razie potrzeby. Myślę, że jest to bardzo zła praktyka programowania polegająca na tym, że kod zależy od tekstu, który jest na wyświetlaczu ...

EDYCJA: Czy użycie tego pola wyboru nie byłoby bardziej sensowne? Poza tym, że reprezentacja wizualna jest inna, robi to, co chcesz, po wyjęciu z pudełka ...

+1

+1 i zdecydowanie zgadzam się z twoją zmianą. Przełącz przyciski zmieniające ich napisy są znanymi przykładami * złego * projektu, ponieważ wprowadzają w błąd użytkownika. Bardzo trudno jest ustalić, który stan jest aktualny i do którego się przełącza - rzecz, którą mówi przycisk, lub rzecz, na którą * nie mówi *. Pole wyboru to zdecydowanie lepsza alternatywa. Pamiętaj, że napisy w polu wyboru powinny być prawie zawsze sformułowane pozytywnie, aby uniknąć podwójnego negatywu. Więcej na ten temat można znaleźć na naszej stronie pytań i odpowiedzi dotyczących UX. W szczególności ten: http://ux.stackexchange.com/questions/1318/ –

1

Proszę Utwórz prosty przycisk. Dwukrotnie kliknij przycisk, a poniższy kod zostanie wygenerowany automatycznie.

Napisz ten prosty kod i uruchomić go .....

A Zobacz Magia to naprawdę zadziała ......

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

Proszę Czy masz jakieś dodatkowe pytania, prosimy o kontakt mnie ....

Numer kontaktowy: 9096713970 ...

0

Istnieje wiele sposobów, aby to zrobić.
Jak dla mnie, to pewnie używać Tag atrybut Control ponieważ:

  1. To jest przechowywany w zmiennej danego przycisku.Nie trzeba żadnych zmiennych zewnętrznych
  2. cały kod może być napisany w jednym sposobie
  3. Zawsze można do niego dostęp z innych metod \ kontroluje

Oto przykładowy kod:

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

Możesz także ustawić domyślną wartość Tag (true lub false) i usunąć sprawdzanie wartości pustej. Będziesz też zawsze w stanie zrobić to w ten sposób dostępu:

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

To nie jest najlepszym rozwiązaniem - jest to po prostu jeszcze jeden.
Na przykład, Roman Gruber pokazał, prawdopodobnie, najlepszą odpowiedź przy użyciu właściwości z logiką zmiany tekstu zamkniętą w setera.

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

to jest to, co zrobiłem .... –

Powiązane problemy