web-dev-qa-db-fra.com

Changer le texte du bouton après avoir cliqué, puis le changer après avoir cliqué à nouveau

J'essaie de changer le texte d'un bouton chaque fois que l'on clique dessus.

Le bouton commence comme "ON". Lorsque je clique dessus pour la première fois, il doit basculer sur "OFF", et lorsque je clique à nouveau dessus, il devrait redevenir Activé.

Je comprends comment le changer en "OFF" quand on clique dessus, mais je ne suis pas sûr de savoir comment vérifier s'il y a un clic secondaire pour pouvoir remettre le texte à "ON".

Voici mon code jusqu'à présent:

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

Essayer

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

J'espère que cela t'aides.

13
Pyromancer

Je peux voir plusieurs problèmes possibles avec cela et peut offrir une solution plus orientée objet: Ajouter une propriété qui garde la trace de "l'état" actuel:

    private bool _IsOn;

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

et en utilisant le gestionnaire d'événements pour basculer simplement la propriété:

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

De cette façon, il est plus facile d'accéder aux informations ultérieurement et vous pouvez facilement remplacer tout ou rien par ce que vous voulez - même globaliser/localiser si nécessaire. Je pense que c'est une très mauvaise pratique de programmation que le code dépende du texte affiché à l'écran ...

EDIT: De plus, utiliser une case à cocher ou un bouton bascule n’aurait-il pas plus de sens? En dehors de la représentation visuelle différente, il fait ce que vous voulez en dehors de la boîte ...

11
Roman Gruber

Il suffit de tester le texte actuel:

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

Edit: Comme Cody le souligne dans les commentaires ci-dessous, cela ne fonctionne pas bien avec la localisation. Pour quelque chose qui peut être plus facilement localisé, utilisez ViewState (en supposant que le texte initial consiste à activer les commandes):

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

S'il vous plaît créer un simple bouton. Double-cliquez sur le bouton et le code suivant sera généré automatiquement.

Écrivez ce code simple et lancez-le .....

Et voir Magic It IS va vraiment marcher ......

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

S'il vous plaît Avez-vous d'autres questions s'il vous plaît contactez-moi ....

Numéro de contact: 9096713970 ...

1
Yogeshwar Desai

Il y a beaucoup de façons de le faire.
Quant à moi, j'utiliserais probablement l'attribut Tag de Control car:

  1. Il est stocké dans la variable d'un bouton. Vous n'avez pas besoin de variables externes
  2. Tout le code peut être écrit en une seule méthode
  3. Vous pouvez toujours y accéder depuis d'autres méthodes\contrôles

Voici l'exemple de code:

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

Vous pouvez également définir la valeur par défaut Tag (true ou false) et supprimer la vérification de la valeur null . Vous pourrez également y accéder de cette manière:

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

Ce n'est pas la meilleure approche - c'est juste une autre.
Par exemple, Roman Gruber a montré, probablement, la meilleure réponse en utilisant des propriétés avec une logique de changement de texte encapsulée dans un séparateur. 

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
Kamal Shetty