Изменить текст кнопки после щелчка, а затем изменить его обратно после нажатия еще раз

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

кнопка запускается как "ON". Когда я нажимаю его в первый раз, он должен измениться на "Выкл", а когда я нажимаю его снова, он должен измениться обратно на On.

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

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

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

6 ответов


попробовать

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

надеюсь, что это помогает.


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

    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: кроме того, не будет ли использование флажка или togglebutton иметь больше смысла? Помимо того, что визуальное представление отличается, оно делает то, что вы хотите из коробки...


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

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

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

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

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

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

и увидеть магию, это действительно сработает......

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...


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

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

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

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) и удалить проверку на значение null. Вы также всегда сможете сделать доступ к нему таким образом:

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

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


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