2013-03-14 20 views
7

Sto provando a cambiare il testo di un pulsante ogni volta che viene fatto clic.Cambia il testo del pulsante dopo il clic, quindi ripristinalo dopo aver fatto nuovamente clic

Pulsante Inizia come "ON". Quando clicco la prima volta dovrebbe cambiare in "OFF", e quando clicco di nuovo, dovrebbe tornare su On.

Ho capito come modificarlo su "OFF" quando si fa clic, ma non sono sicuro su come controllare un clic secondario in modo da poter riportare il testo su "ON".

Ecco il mio codice finora:

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

risposta

7

Prova

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

Spero che questo aiuti.

3

Basta testare il testo attuale:

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

Edit: Come sottolinea Cody nei commenti qui sotto, che non funziona bene con la localizzazione. Per qualcosa che può essere più facilmente localizzato uso ViewState (supponendo che il testo iniziale è quello di trasformare gli ordini on):

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

Si noti che questo sta utilizzando l'operatore [inline-if] (http://en.wikipedia.org/wiki/%3F :). Solo FYI. +1 per un semplice liner. – aqua

+1

Potrebbe trattarsi di un semplice modulo, ma questo approccio si riduce al minimo non appena si localizza l'interfaccia utente. –

+0

@Cody molto vero, risposta aggiornata per risolvere quel problema. – MattW

10

posso vedere diversi problemi possibili con questo e in grado di offrire un oggetto orientato soluzione più: aggiunta una proprietà che tiene traccia dello "stato" corrente:

private bool _IsOn; 

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

e con il gestore eventi semplicemente passare la proprietà:

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

in questo modo è più facile per accedere alle informazioni più tardi e si può sostituire facilmente on/off con quello che vuoi - anche globalizzare/localizzarlo, se necessario. Penso che sia una pessima pratica di programmazione che il codice dipenda dal testo visualizzato sul display ...

MODIFICA: Inoltre, non sarebbe più utile utilizzare una casella di controllo o un pulsante di commutazione? A parte il fatto che la rappresentazione visiva è diversa, fa quello che vuoi fuori dalla scatola ...

+1

+1 e sono fortemente d'accordo con la tua modifica. I pulsanti di commutazione che cambiano la loro didascalia sono famosi esempi di design * cattivo * perché confondono l'utente. È molto difficile sapere quale stato è attuale e a quale si sta attivando: la cosa che dice il pulsante o la cosa che * non * dice. Una casella di controllo è di gran lunga l'alternativa migliore. E ricorda che le didascalie delle caselle di controllo dovrebbero quasi sempre essere formulate in modo positivo per evitare di creare un doppio negativo. Ulteriori informazioni su questo argomento sono disponibili sul nostro sito di domande e risposte UX. In particolare questo: http://ux.stackexchange.com/questions/1318/ –

1

Si prega di creare un semplice pulsante. Fare doppio clic sul pulsante e il codice seguente verrà generato automaticamente.

Scrivi questo semplice codice ed eseguirlo .....

e vedere Magia è davvero gonna lavoro ......

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

Please Do avete ulteriori domande si prega di contattare me ....

Contatto Numero: 9.096.713,97 mille ...

0

ci sono un sacco di modi per farlo.
Quanto a me, avrei probabilmente usare Tag attributo del Control perché:

  1. Viene memorizzato nella variabile di un pulsante.Non è necessario alcun variabili esterne
  2. Tutto il codice può essere scritto in un unico metodo
  3. È sempre possibile accedervi da altri metodi \ controlla

Ecco il codice di esempio:

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

È anche possibile impostare il valore predefinito Tag (true o false) e rimuovere il controllo per il valore null. Potrai anche essere in grado di farlo sempre l'accesso in questo modo:

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

Non è l'approccio migliore - è solo un altro.
Ad esempio, Roman Gruber ha mostrato, probabilmente, la migliore risposta utilizzando le proprietà con la logica di modifica del testo incapsulata in un setter.

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

questo è quello che ho fatto .... –

Problemi correlati