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

看看我的其他任务,如果做对了,我会得到足够的线索来自己尝试它们,而不是花很多时间在无休止的谷歌搜索上。

4

3 回答 3

3

每次单击按钮时都不需要切换标志。如果您使用?:运算符,您还可以大大减少代码的大小:

static bool isOn = true;
toggleButtonText->Text = isOn ? "On" : "Off";
isOn = !isOn;
于 2012-07-20T09:56:51.403 回答
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 回答
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 回答