使用继承处理事件跨项目

时间:2012-04-25 11:44:10

标签: c# c++ .net wpf c++-cli

我有2个项目; - 我的应用程序用C ++编写,一些项目文件设置为使用/ clr - 我的C#WPF控件库,其中包含一些表单

在C ++应用程序中,我从C#dll加载表单并在STAThread中显示它们,而我在后台运行其他一些本机内容。

我想在C ++应用程序中处理来自C#表单的表单事件。这是我启动表单的代码;

using namespace System::Windows;
using namespace System::Windows::Controls;
using namespace MyProject::Interface::Views;

public ref class MyProjectApplication : public Application
{
};

[STAThread]
void ManagedMain()
{
    CLILicenseView^ winLicenseAgreement = gcnew CLILicenseView();

    MyProjectApplication^ MyProjectCLI = gcnew MyProjectApplication();
    MyProjectCLI->Run(winLicenseAgreement);
}

我的原始表单名为“License.xaml”,我试图继承它并覆盖事件,因为我认为它可以帮助我处理事件,但我不知道我在做什么。

using namespace System;
using namespace System::Windows;
using namespace System::Windows::Controls;
using namespace MyProject::Interface::Views;

namespace MyProject
{
    public class CLILicenseView : License
    {
        public void CLILicenseView()
        {
            //
        }
    }
}

这是最好的方法,如果不是,我怎样才能处理来自我的C ++应用程序的表单事件(即:按钮点击)?

1 个答案:

答案 0 :(得分:0)

我认为组合是这里的正确工具,而不是继承。在我所使用的C ++ / CLI项目中(只是一个类库,没有UI),ref类通常包含一个指向C ++业务逻辑的无指针指针。当用户想要与业务逻辑交互时,他们调用托管方法,然后通过指针调用非托管代码。在您的情况下,当表单要与非托管代码进行交互时,它应该回调到MyProjectApplication,而{{1}}会调用您的非托管代码。