2013-03-14 2 views
7

Я пытаюсь изменить текст кнопки каждый раз, когда ее щелкнули.Измените текст кнопки после щелчка, затем измените его после повторного щелчка

Кнопка запускается как «ВКЛ». Когда я нажимаю его в первый раз, он должен измениться на «ВЫКЛ», и когда я снова нажму на него, он должен вернуться к «Вкл.».

Я понимаю, как изменить его на «ВЫКЛ» при нажатии, но я не уверен, как проверить дополнительный щелчок, чтобы я мог изменить текст на «ВКЛ».

Вот мой код до сих пор:

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

ответ

7

Попробуйте

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

Надеется, что это помогает.

3

Просто проверить текущий текст:

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

Edit: Как Cody указывает в комментариях ниже, что не очень хорошо работает с локализацией. Для чего-то, что может быть более легко локализованным использование ViewState (предполагая, что исходный текст превратить заказы):

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

Обратите внимание, что это используется оператором [inline-if] (http://en.wikipedia.org/wiki/%3F :). Просто FYI. +1 для аккуратного однострочного. – aqua

+1

Это может быть аккуратный однострочный лайнер, но этот подход падает на его лице, как только вы локализируете пользовательский интерфейс. –

+0

@ Кодирование очень верно, ответ обновляется, чтобы решить эту проблему. – MattW

10

Я вижу несколько возможных проблем с этим и может предложить более объектно-ориентированное решение: Добавление свойства, отслеживающий текущего «состояния»:

private bool _IsOn; 

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

и с помощью обработчика событий, чтобы просто переключить свойство:

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

Таким образом, это легче получить доступ к информации позже, и вы можете легко заменить вкл/выкл с тем, что вам нравится - даже глобализацию/локализовать его в случае необходимости. Я думаю, что очень плохой практикой программирования, чтобы код зависел от текста, который находится на дисплее ...

EDIT: Кроме того, не было бы лишнего смысла использовать флажок или тумблер? Помимо визуального представления, которое отличается от другого, оно делает то, что вы хотите из коробки ...

+1

+1, и сильно согласился с вашим редактированием. Переключающие кнопки, которые меняют заголовок, являются печально известными примерами дизайна * bad *, поскольку они путают пользователя. Очень сложно узнать, какое состояние является текущим, и какое из них вы переключаете - то, что говорит кнопка, или то, что он * не говорит. Флажок - лучшая альтернатива. И помните, что надписи на флажках почти всегда должны быть сформулированы положительно, чтобы избежать создания двойного отрицательного значения. Подробнее об этом можно узнать на нашем сайте UX Q & A. В частности, это: http://ux.stackexchange.com/questions/1318/ –

1

Пожалуйста, создайте простую кнопку. Двойной щелчок на кнопке и следующий код будут автоматически сгенерированы.

Написать этот простой код и запустить его .....

и увидеть волшебство это действительно сработает ......

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

Пожалуйста У вас есть какие-либо вопросы, пожалуйста, свяжитесь с мне ....

Контактный телефон: 9096713970 ...

0

Есть много способов сделать это.
Что касается меня, то я бы, вероятно, использовать Tag атрибут Control, потому что:

  1. Это время хранящийся в переменной а кнопки.Вам не нужны никакие внешние переменные
  2. Весь код можно записать в одном методе
  3. Вы всегда можете получить доступ к нему из других методов \ контролирующей

Вот пример кода:

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

Вы также можете установить значение по умолчанию Tag (true или false) и удалить проверку нулевого значения. Вы также всегда будете в состоянии сделать доступ к нему таким образом:

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

Это не самый лучший подход - это просто еще один.
Например, Roman Gruber показал, вероятно, лучший ответ, используя свойства с логикой изменения текста, инкапсулированной в сеттер.

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

вот что я сделал .... –