1

私が取り組んでいるソフトウェアは元々Delphiで作成されており、ソフトウェアへの最近の追加はすべてC#で行われています。ベースのDelphiフォームからいくつかのC#フォームを派生させたいと思います。Visual Studio 2008でC#フォームのデザインビューを開こうとするとエラーが発生することを除いて、ほとんどの機能を使用できました。エラーメッセージは次のとおりです。「タイプ'baseclass'のコンストラクターが見つかりません。」

私はいくつかの検索を行いましたが、これは明らかに、Delphiフォームに引数がゼロのデフォルトのコンストラクターがないためです。Delphi TFormクラスには、引数をゼロにするデフォルトのコンストラクターがないため、Delphiフォームに引数を1つ追加することはできません。

私が持っているコードは、必要な方法でコンパイルおよび実行されますが、将来的には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();
  }
}

前もって感謝します

4

4 に答える 4

4

同じ申請期間内で Win フォームと VCL フォームを混在させることはできません。これらは 2 つの別個の 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

から継承するベース C# クラスを追加しTMyDelphiForm、Delphi フォームから複数の C# フォームを派生させる必要がある場合に備えて、すべての Delphi / C# マッピング コードをそこに置きます。

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 に答える