2011-02-28 13 views
1

我正在使用的軟件最初是用Delphi編寫的,而且任何最新的軟件補充都已在C#中完成。我想從基本的Delphi表單中派生出一些C#表單。除了當我嘗試在Visual Studio 2008中打開C#表單的設計視圖時,我設法使其大部分工作正常,但出現錯誤。錯誤消息如下所示:「找不到typebase類中的構造函數」。從基德爾福表格導出C#表格

我已經做了一些搜索,顯然這是由於德爾福的形式沒有一個默認的構造函數,它採用零參數。 Delphi的TForm類沒有一個默認的構造函數,它的參數爲零,所以我不能只在我的Delphi表單中添加一個。

我編譯並運行的代碼完全是我需要的,但是我將需要能夠在將來向C#表單添加新組件。任何人有任何想法,我怎樣才能讓Visual Studio設計視圖工作?

這裏是什麼,我有一個非常簡單的版本:

Delphi代碼:

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

什麼版本的Delphi? – 2011-02-28 14:28:26

+0

我正在使用CodeGear RAD Studio 2007 – Stuart 2011-02-28 14:35:06

+3

您使用的是VCL.Net嗎? AFAIK這是基於WinForms的**而非**,所以您可能無法將它用於WinForms設計器。 – 2011-02-28 17:04:29

回答

4

您不能在同一個應用程序期間混合和匹配Win表單和VCL表單。它們是兩個獨立的Windows框架,不兼容。唯一的方法是在Visual Studio中重做GUI,並通過Delphi.NET編譯器鏈接到作爲程序集構建的非GUI組件。

+0

我認爲你是對的,昨天我花了大部分時間試圖解決這個問題,但沒有取得任何成功。這是一個恥辱,它不工作,會更容易,所以這是值得一試。謝謝大家的幫助 – Stuart 2011-03-01 08:35:47

1

設計師需要一個公共無參數構造函數在基類上工作。

取決於您的基類的實施,這可能會或可能不會成爲一個阻礙。您可以通過添加如下內容來解決問題: -

public MyCSharpForm() : base (null) 
{ 
} 

到您的c#表單。但你需要確保基類在設計時正確的行爲(即,渲染邏輯可以與空,或任何你提供發件人靜態值應對。

+0

不幸的是,這並沒有解決問題,我開始懷疑這個問題可能是一個顯示瓶塞,因爲你有建議 – Stuart 2011-02-28 14:58:34

0

我想補充一點,從繼承的鹼基C#類TMyDelphiForm,並把所有的Delphi/C#映射代碼在那裏,萬一我需要從德爾福形式獲得不止一個C#的形式,像:

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

,然後從MyCSharpFormBase繼承表單 避風港沒有嘗試過,但我認爲它會讓設計師滿意。

+0

只是給了這個嘗試,但當我加載設計視圖它給出的對象引用未設置爲對象異常。我猜這是與原始錯誤有關,但我需要研究它 – Stuart 2011-02-28 15:00:29

+0

嘗試':base(this){}'而不是':base(null){}' – SWeko 2011-02-28 15:06:20

+0

試過但'this'關鍵字不能使用這裏。你的錯誤「關鍵字,這是不是在目前情況下可用」試圖編譯 – Stuart 2011-02-28 15:13:41

0

做喲你有delphi類的源代碼嗎?你能看到它對對象/ Component Sender參數做了什麼嗎?

如果你能實例化的東西,將很容易satisify德爾福類,那麼你也許可以得到設計師的支持,調用該基地這樣一箇中間類: -

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

然後還要滿足各種設計形式繼承MyIntermediateClass

+0

我有Delphi的源代碼,我不認爲這會造成任何問題。然而,當我實現這一點,打開設計視圖我得到另一個新的錯誤「設計師加載程序未提供根組件,但沒有指出原因」 – Stuart 2011-02-28 15:50:33

+0

我關了一夜,希望我有一些新鮮的想法是早上。感謝您的幫助@ slippyr4和@SWeko – Stuart 2011-02-28 15:58:35