C ++ / CLI多个按钮维护变量值

时间:2012-04-21 16:41:30

标签: visual-studio-2010 c++-cli

好的,让我解释一下我的问题。

我正在制作一个程序,我有一个按钮。单击它会显示数字“1”,然后,在此之后,任何进一步的单击将增加该值,直到它达到值“9”。 (这是一个字符串)。我编写了这个代码,它将一个int变量声明为0(是的,这是一个错误,但让我继续)然后递增它并将其解析为字符串并在按钮文本上显示它(这是在按钮单击时执行的代码):

private: System::Void a0_Click(System::Object^  sender, System::EventArgs^  e) {
             int i = 0;
             i++;
             a0->Text = i.ToString();
         }

然而,正如你可以怀疑的那样,我按每次按下按钮声明为0时愚蠢,结果是1是按钮上显示的唯一值。接下来我尝试做的事情是将i声明为值为0的全局变量。但是,我遇到了另一个问题。我有82个这样的按钮,我想找到我能找到的最简单的解决方案,所以共享i变量似乎合乎逻辑,

下一个问题是如果我按下第一个按钮5次,它上面显示的数字将是“5”,但是如果我按下另一个按钮,默认情况下该值不会是“1”,它将是“ 6“(第一个按钮的值加1)。基本上它会继承第一个的值。

现在我走到了尽头。我不知道该怎么做。我尝试使用i和i2,但我只是追逐自己的尾巴。有一个非常简单的解决方案吗?请记住,我有82个按钮(是的,我知道它很多),默认情况下为0.当我点击每个按钮时,我需要它从<0>开始增加一个。有什么想法吗?

注意:操作系统是Windows XP,IDE是使用Windows窗体应用程序,C ++ / CLI的Visual Studio 2010m。如果我忘记在评论中提及任何内容,我会添加它。

1 个答案:

答案 0 :(得分:2)

您可以检查sender以找出点击的按钮。

void anybutton_Click(System::Object^ sender, System::EventArgs^)
{
    Button^ btn = dynamic_cast<Button^>(sender); // or safe_cast
    int i;
    if (System::Int32::TryParse(btn->Text, i)) {
         i++;
         btn->Text = i.ToString();
    }
}