14

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

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

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

これまでの私のコードは次のとおりです。

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

5 に答える 5

18

試す

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

お役に立てれば。

于 2013-03-14T03:07:55.237 に答える
13

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

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

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

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

于 2013-03-14T03:16:27.347 に答える
3

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

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";
于 2013-03-14T03:05:56.283 に答える
1

これを行うには多くの方法があります。
私に関しては、次の理由Tagで属性を使用する可能性があります。Control

  1. ボタンの変数に格納されています。外部変数は必要ありません
  2. すべてのコードを 1 つのメソッドで記述できる
  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は、セッターにカプセル化されたテキスト変更ロジックを持つプロパティを使用して、おそらく最良の答えを示しています。

于 2015-08-10T11:57:26.410 に答える
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";
    }
}
于 2016-10-25T10:11:51.167 に答える