1

我正在开发的软件最初是用 Delphi 编写的,最近对该软件的任何添加都是用 C# 完成的。我想从基本的 Delphi 表单派生一些 C# 表单。我已经设法让它大部分工作,除了当我尝试在 Visual Studio 2008 中打开 C# 窗体的设计视图时出现错误。错误信息如下“未找到类型'基类'的构造函数”。

我已经进行了一些搜索,显然这是由于 Delphi 表单没有采用零参数的默认构造函数。Delphi TForm 类没有采用零参数的默认构造函数,因此我不能只在我的 Delphi 表单中添加一个。

我的代码完全按照我的需要进行编译和运行,但是我将来需要能够将新组件添加到 C# 表单中。有人对我如何让 Visual Studio 设计视图工作有任何想法吗?

这是我所拥有的非常简化的版本:

德尔福代码:

type
  TMyDelphiForm = class(TForm)

  private
    ...
  public
    constructor Create(Sender : TObject);
  end;

implementation

  Constructor TMyDelphiForm.Create(Sender : TObject);
  begin
    inherited;
  end;

C#代码:

public partial class MyCSharpForm : TMyDelhpiForm
{
  public MyCSharpForm(Component sender) : base(sender);
  {
    InitializeComponent();
  }
}

提前致谢

4

4 回答 4

4

您不能在同一应用程序中混合和匹配 Win Forms 和 VCL Forms - 期间。它们是两个独立的 Windows 框架,不兼容。唯一可行的方法是在 Visual Studio 中重做 GUI,并链接到通过 Delphi.NET 编译器构建为程序集的非 GUI 组件。

于 2011-02-28T21:38:31.953 回答
1

设计器需要基类上的公共无参数构造函数才能工作。

取决于您的基类的实现,这可能是也可能不是一个显示停止器。您可以通过添加以下内容来解决问题:-

public MyCSharpForm() : base (null)
{
}

到您的 c# 表单。但是您需要确保基类在设计时行为正确(即,呈现逻辑可以处理 null 或您为 Sender 提供的任何静态值。

于 2011-02-28T14:42:10.513 回答
0

我将添加一个从TMyDelphiForm.

public class MyCSharpFormBase : TMyDelphiForm
{
    public MyCSharpFormBase() : base (null) { } 
}

然后从MyCSharpFormBase. 没试过,但我认为它会满足设计师。

于 2011-02-28T14:51:47.920 回答
0

你有delphi类的源代码吗?你能看到它对 object/Component Sender 参数的作用吗?

如果您可以轻松地实例化满足 delphi 类的东西,那么您可能可以通过调用基础的中间类获得设计器支持,如下所示:-

    public class MyIntermediateClass : MyDelphiForm
    {
      public MyIntermediateClass() : base(new Component())
      {
      }
    }

然后让您的可设计表单继承 MyIntermediateClass

于 2011-02-28T15:33:26.800 回答