Visual C++:将事件处理程序提取到 .cpp 文件

Visual C++: Extracting event handler to .cpp file

作为一名 php 开发人员,在进行了大量算法 C++ 练习后,我决定开始学习 Visual C++。刚开始时,我就卡在了一些非常基本的东西上。我正在尝试将 Button-click 事件从 .h 文件中提取到我的 .cpp 文件中。

我的 .h 文件:

#pragma once

namespace Project1 {
...
    this->button2->Click += gcnew System::EventHandler(this, &MyForm::button2_Click);
...
}

在我的 .cpp 文件中,我尝试这样做:

#include "MyForm.h"
using namespace System;
using namespace System::Windows::Forms;
namespace Project1 {
    [STAThread]
    void main(array<String^>^ args)
    {

        void MyForm::button2_Click(System::Object^  sender, System::EventArgs^  e) {
            // definition
        }
...
}

它不起作用。它说 Project1::MyForm 没有 button2_Click。我错过了什么?

标准 'learning the language' 警告:这不是您正在编写的 C++,而是 C++/CLI。 C++/CLI 是 Microsoft 的一种语言,旨在允许 C# 或其他 .Net 语言与标准 C++ 进行交互。在这种情况下,C++/CLI 可以提供两者之间的转换。如果您仍在学习 C++,请不要从 C++/CLI 开始。为了有效地用 C++/CLI 编写,一个人应该已经了解 C++ 和 C#,然后还有一些东西需要学习 C++/CLI。如果您想学习 C++,请坚持使用标准(非托管)C++。 (在 Visual Studio 中创建一个 "Win32" C++ 项目。)如果你想学习托管代码,那么我会使用 C#。


void main(array<String^>^ args)
{
    void MyForm::button2_Click(System::Object^  sender, System::EventArgs^  e) {
        // definition
    }
}

这不是您定义方法的方式:您在另一种方法的定义中得到了一种方法的定义,这是不允许的。

您在这里需要做的是在MyForm.h中声明button2_Click方法,并在MyForm.cpp

中实现它
// MyForm.h
public ref class MyForm : System::Windows::Forms::Form
{
    // Lots of other stuff...
private:
    void button2_Click(System::Object^ sender, System::EventArgs^ e);
}

.

// MyForm.cpp
#include "MyForm.h"

void MyForm::button2_Click(System::Object^ sender, System::EventArgs^ e)
{
    // definition
}