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

VS 2013 winform application: how to convert generic object to button type

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

已经尝试这样做了:

通用按钮 = 按钮发送者;

但它给出了以下错误:

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

我不太确定我理解这个问题,但基于我的想法我理解我会尝试回答。

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

编辑 - 稍作修改以作澄清

假设您已经为您的单个事件处理程序编写了 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. 中的属性 window
  3. 确保按下(启用)属性浏览器中的 "events" 按钮(带有闪电图标)
  4. 寻找 "CLick" 事件
  5. 在相邻的下拉列表中,select 'allButtons_click'
  6. 对每个键盘按钮重复该过程。

要将 Click 事件处理程序的发送器参数转换为按钮,请尝试

Button^ myButton = (Button^)sender;

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

您可以在加载表单时在运行时执行此操作,但我推断您的 objective 是在 IDE.

中完成此操作