2013-03-14 15 views
7

ボタンのテキストをクリックするたびに変更しようとしています。クリック後にボタンのテキストを変更し、再度クリックした後にボタンのテキストを変更します。

ボタン「オン」として開始します。最初にクリックすると「OFF」に変わり、もう一度クリックするとOnに戻ります。

クリックすると「OFF」に変更する方法を理解していますが、セカンダリクリックを確認する方法がわからないので、テキストを「ON」に戻すことができます。

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

希望をお試しください。現在の「状態」のトラック続けるプロパティの追加 :

private bool _IsOn; 

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

を単に切り替えるにイベントハンドラを使用して、私はそれにはいくつかの可能性のある問題を見ることができ、よりオブジェクト指向のソリューションを提供することができます

3

ちょうど現在のテキストをテストします:

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

編集:コーディは、以下のコメントで指摘するようにローカライズとうまく動作しない

はここで、これまでに私のコードです。より簡単に(最初のテキストは、上の注文をオンにすると仮定)の使用の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はきれいな1ライナーです。 – aqua

+1

これはきちんとした1ライナーかもしれませんが、UIをローカライズするとすぐに、このアプローチはその面でフラットになります。 –

+0

@Cody非常に真実、その問題に対処するために更新されました。 – MattW

10

プロパティ:それは後での情報にアクセスする方が簡単ですし、あなたが簡単にあなたが好きでオン/オフ置き換えることができ

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

その方法 - でも、必要であれば、それをローカライズ/国際化。私はコードが表示されているテキストに依存することは非常に悪いプログラミングの練習だと思う...

EDIT:また、チェックボックスやトグルボタンを使用しない方がいいでしょうか?視覚的表現が違う以外に、それはあなたが箱から望むものを行います。

+1

+1、あなたの編集に強く同意しました。キャプションを変更するトグルボタンは、ユーザーを混乱させるため、* bad *デザインの悪名高い例です。どの国家が現在のものなのか、どの国がトグルしているのかを知ることは非常に難しいです。ボタンが言うことや、言わないことです。チェックボックスははるかに良い選択肢です。また、チェックボックスのキャプションは、ほとんどの場合、ダブルネガティブを避けるために積極的に表現する必要があります。この問題に関する詳細は、当社のUX Q&Aサイトで確認できます。特にこの1つ: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

これを実行する方法はたくさんあります。これは、ボタンの変数に格納されている

  1. :ので、私として
    は、私はおそらくControlTag属性を使用します。あなたはすべてのコードは、あなたはいつも他のメソッドからアクセスすることができ、単一の方法
  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

これは私がやったことです.... –

関連する問題