我正在使用的软件最初是用Delphi编写的,最近软件的任何新增内容都是用C#完成的。我想从基础Delphi表单中派生出一些C#表单。我已经成功地完成了大部分工作,除非我尝试在Visual Studio 2008中打开C#表单的Design视图时出现错误。错误消息如下“未找到类型'基类的构造函数。”
我做了一些搜索,显然这是因为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();
}
}
提前致谢
答案 0 :(得分:4)
您不能在同一应用程序中混合和匹配Win Forms和VCL表单。它们是两个独立的Windows框架,不兼容。唯一的方法是在Visual Studio中重做GUI,并链接到通过Delphi.NET编译器构建为程序集的非GUI组件。
答案 1 :(得分:1)
设计者需要基类上的公共无参数构造函数才能工作。
取决于您的基类的实现,这可能是也可能不是显示停止。您可以通过添加以下内容来解决问题: -
public MyCSharpForm() : base (null)
{
}
到您的c#表单。但是你需要确保基类在设计时表现正常(即,渲染逻辑可以处理null或者你为Sender提供的任何静态值。
答案 2 :(得分:0)
我会添加一个继承自TMyDelphiForm
的基类C#类,并将所有的Delphi / C#映射代码放在那里,以防我需要从Delphi表单派生多个C#表单,类似于:
public class MyCSharpFormBase : TMyDelphiForm
{
public MyCSharpFormBase() : base (null) { }
}
然后从MyCSharpFormBase
继承您的表单。
没有尝试过,但我认为它会让设计师满意。
答案 3 :(得分:0)
你有delphi类的源代码吗?你能看到它对object / Component Sender参数的作用吗?
如果你可以轻松地实例化一些能够满足delphi类的东西,那么你可以通过一个像这样调用基类的中间类来获得设计器支持: -
public class MyIntermediateClass : MyDelphiForm
{
public MyIntermediateClass() : base(new Component())
{
}
}
然后让您的可设计表单继承MyIntermediateClass