VS 2013 winform应用程序:如何将通用对象转换为按钮类型

时间:2015-05-30 12:19:01

标签: winforms c++-cli visual-c++-2013

我正在使用winform在visual studio 2013上设计windows计算器 application.i想为模拟计算器键盘的WinForms应用程序上的数字按钮编写单个按钮处理程序。但为了做到这一点,我必须首先将对象^ sender转换为按钮类型。

已经尝试过这样做:

Button generic =按钮发件人;

但它会出现以下错误:

Error   3   error C1506: unrecoverable block scoping 
Error   4   IntelliSense: type name is not allowed  

这是我需要编码的myform.h部分:

#pragma endregion
    private: System::Void MyForm_Load(System::Object^  sender,
                                      System::EventArgs^  e) {
    }

    private: System::Void button12_Click(System::Object^  sender, 
                                         System::EventArgs^  e) {
    }
    private: System::Void button9_Click(System::Object^  sender, 
                                        System::EventArgs^  e) {
    }
    private: System::Void button3_Click(System::Object^  sender, 
                                        System::EventArgs^  e)  {
        //this is the button i want to change to a generic button
        //Button generic = Button sender;
        results->Text +=  "1";
    }
};
}

1 个答案:

答案 0 :(得分:0)

我不确定我是否理解这个问题,但根据我的想法我理解我会尝试回答。

听起来您想为模拟计算器键盘的WinForms应用程序上的数字按钮编写单个按钮处理程序。您可以通过编写带有按钮处理程序事件签名的方法,然后将每个键盘按钮的单击事件处理程序指向该单个函数来完成此操作。 "发件人"参数应该包含点击的实际来源;您将不得不询问按钮的某些方面以确定它代表的数字。

修改 - 修改一下以澄清

假设您已经为您的单个事件处理程序编写了shell,这是上面显示的签名的事件方法,并将该处理程序命名为allButtons_click',这里的一般形式:

`
    private: System::Void allButtons_Click(System::Object^  sender, System::EventArgs^  e) {
        Button^ foo = (Button^)sender;
        // do stuff
    }

`

使每个按钮响应IDE中的相同Click事件处理程序:

  1. 在表单的GUI设计器中,单击每个按钮,然后查看Visual STudio中的“属性”窗口
  2. 确保"事件"按下(启用)按钮(带闪电图标)按钮(启用)
  3. 寻找" CLick"事件
  4. 在相邻的下拉列表中,选择' allButtons_click'
  5. 对每个键盘按钮重复此过程。
  6. 要将Click事件处理程序的sender参数强制转换为按钮,请尝试

    Button^ myButton = (Button^)sender;
    

    然后,您必须询问每个按钮以确定它代表的值。

    您可以在表单加载时在运行时执行此操作,但我推断您的目标是在IDE中完成此操作。