2

ボタンをクリックしたときに、ボタンのテキストを「オン」と「オフ」に切り替えるという小さなタスクが与えられました。まだ押されていないため、「オフ」というテキストで始まりますが、クリックすると変更されます。 「オン」に。その後、交互にクリックするたびに、ボタンのテキストが「オン」から「オフ」に変化し続けるのが理想的です。私の場合、OnとOffはTrueまたはFalseとして扱うことができるので、単純なブール変数が解決策になると思いましたが、そうではありません...

とにかく、これが私がこれまでに持っているボタンのハンドラーのコードです:

private: System::Void toggleButtonText_Click(System::Object^  sender, System::EventArgs^  e) 
    {
      static bool isOn = true;
      if(isOn == false)
      {
       toggleButtonText->Text = "Off";

      }
      else
      {
      toggleButtonText->Text = "On";
      }

}

ご覧のとおり、ボタンの名前は「toggleButtonText」です。InitializeComponent(void)メソッドでは、この行により、デフォルトのテキストを「オフ」にできます。

this->toggleButtonText->Text = L"On";

私の残りのタスクを見ると、これを正しく行うことで、無限のGoogle検索に何年も費やすのではなく、自分でそれらを試すのに十分な手がかりが得られます。

4

3 に答える 3

3

ボタンをクリックするたびにフラグを切り替える必要はありません。?:演算子を使用すると、コードのサイズを大幅に縮小することもできます。

static bool isOn = true;
toggleButtonText->Text = isOn ? "On" : "Off";
isOn = !isOn;
于 2012-07-20T09:56:51.403 に答える
1

ここで静的変数を使用することは、非常にくだらない解決策です。たとえば、ボタンの状態をプログラムで変更すると、静的変数は実際のプレス状態と同期しなくなります。

ボタン自体からトグル状態を取得しないのはなぜですか? Windowsフォームに実際のトグルボタンを追加する方法は次のとおりです。その後、次の方法でメソッドを変更できます。

System::Void toggleButtonText_Click(System::Object^  sender, System::EventArgs^  e) 
{
    CheckBox^ button = (CheckBox^)sender;
    if (button->Checked)
    {
        button->Text = "On";
    }
    else
    {
        button->Text = "Off";
    }
}
于 2012-07-20T10:28:38.547 に答える
1

テキストを切り替えた後、変数の状態を更新する必要があります

  static bool isOn = true;
  if(isOn == false)
  {
     toggleButtonText->Text = "Off";
  }
  else
  {
     toggleButtonText->Text = "On";
  }
  isOn = !isOn; //toggle the flag too
于 2012-07-20T09:45:29.900 に答える