C++ cli 无法创建事件处理程序
我正在尝试将事件绑定到菜单项。它编译。但是,单击“关于”菜单项时,不会发生任何事情。请帮忙C++ cli 无法创建事件处理程序,c++-cli,eventhandler,C++ Cli,Eventhandler,我正在尝试将事件绑定到菜单项。它编译。但是,单击“关于”菜单项时,不会发生任何事情。请帮忙 ref class MenuEventListener { public: MenuEventListener (System::Windows::Forms::Form ^form) { this->form = form; this->form->Click += gcnew EventHandler (this, &MenuE
ref class MenuEventListener
{
public:
MenuEventListener (System::Windows::Forms::Form ^form)
{
this->form = form;
this->form->Click += gcnew EventHandler (this, &MenuEventListener::AboutClick);
}
private:
System::Windows::Forms::Form^ form;
void AboutClick (Object^ sender, System::EventArgs^ args)
{
System::String ^text = gcnew System::String ("This is an about message");
System::String ^cap = gcnew System::String("About");
System::Windows::Forms::MessageBox::Show (
(IWin32Window^) Control::FromHandle (form->Handle),
text, cap,
System::Windows::Forms::MessageBoxButtons::OK,
System::Windows::Forms::MessageBoxIcon::Question);
}
};
// Called in the form constructor
menuEventListener = gcnew MenuEventListener (this);
哦,如果有人能解释事件处理程序的概念,特别是,如何实际使用“类事件”及其与事件引发函数的关系,比如OnClick。我明白了,但几乎没有。这样的人希望有人解释他们是否会足够友好
编辑:
以下是“关于”菜单的上下文
TextEditorMenu::TextEditorMenu ()
{
// Create components
menu = gcnew System::Windows::Forms::MainMenu ();
fileMenuItem = gcnew System::Windows::Forms::MenuItem ();
helpMenuItem = gcnew System::Windows::Forms::MenuItem ();
newMenuItem = gcnew System::Windows::Forms::MenuItem ();
openMenuItem = gcnew System::Windows::Forms::MenuItem ();
saveMenuItem = gcnew System::Windows::Forms::MenuItem ();
saveAsMenuItem = gcnew System::Windows::Forms::MenuItem ();
aboutMenuItem = gcnew System::Windows::Forms::MenuItem ();
// Intizlize components
fileMenuItem->Text = "File";
helpMenuItem->Text = "Help";
aboutMenuItem->Text = "About";
newMenuItem->Text = "New File";
openMenuItem->Text = "Open File";
saveMenuItem->Text = "Save";
saveAsMenuItem->Text = "Save As";
代码中的“关于”菜单项在哪里?这段代码订阅表单点击事件。所以,你需要订阅aboutMenuItem->Click事件,你的代码订阅表单->Click事件。什么,我很困惑,你能把它放在一个不那么混乱的表单中吗?我不知道你的程序的结构以及TextEditorMenu、form和MenuEventListener之间的关系,因此,答案被混淆为你的问题。您的代码
this->form->Click
必须替换为订阅aboutMenuItem->Click
。例如,您可以创建MenuEventListener构造函数,该构造函数接受MenuItem
参数。好的,谢谢,多亏了您的帮助,我才得以更正。