web-dev-qa-db-ja.com

クリック後にボタンのテキストを変更し、再度クリックした後に元に戻す

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

ボタンは「ON」で始まります。初めてクリックすると「OFF」に変わり、もう一度クリックすると「On」に戻ります。

クリックしたときに「オフ」に変更する方法は理解していますが、テキストを「オン」に戻すことができるように、副クリックを確認する方法がわかりません。

ここに私のコードがあります:

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

試して

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

お役に立てれば。

15
Pyromancer

私はそれに関していくつかの考えられる問題を見ることができ、よりオブジェクト指向のソリューションを提供できます:現在の「状態」を追跡するプロパティを追加します:

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

そうすれば、後で情報にアクセスしやすくなり、必要に応じてオン/オフを簡単に置き換えたり、グローバル化/ローカライズしたりすることもできます。ディスプレイ上のテキストに依存するコードを持つことは、非常に悪いプログラミング慣行だと思います...

編集:また、チェックボックスまたはトグルボタンを使用する方が理にかなっていますか?視覚的な表現が異なること以外は、箱から出してすぐに欲しいことをします...

12
Roman Gruber

現在のテキストをテストするだけです:

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

編集:Codyが以下のコメントで指摘しているように、ローカリゼーションではうまく機能しません。より簡単にローカライズできるものについては、ViewStateを使用します(最初のテキストは注文をオンにすることを想定しています)。

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

シンプルなボタンを作成してください。ボタンをダブルクリックすると、次のコードが自動的に生成されます。

この簡単なコードを書いて実行してください.....

そしてMagic It IS本当にうまくいく......

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

1
Yogeshwar Desai

これを行うには多くの方法があります。
私に関しては、おそらくTagControl属性を使用します。

  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)を設定し、null値のチェックを削除することもできます。また、この方法でいつでもアクセスできます。

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

それは最良のアプローチではありません-それは単なる別のアプローチです。
たとえば、Roman Gruberは、おそらく、セッターにカプセル化されたテキスト変更ロジックを持つプロパティを使用した最良の答えを示しています。

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