1

Aから継承するクラスがありUserControlます:

public class A : UserControl
{
  private Form1 _form; // class Form1 : Form { //... }

  private A() 
  {
      InitializeComponent();
  }

  public A(Form1 form) : this() 
  {
     _form = form;
  }
}

そして、ビジュアル コード デザイナーがコードを作成します。

private void InitializeComponent()
{
   this.a = new A((Form1)this); // here I myself added foo object in ctor
   //...
}

private A a;

そして、私はエラーを持っています:

Warning 1 Type 'A' does not have a constructor with parameters of types Form. 0 0

私は何を間違えましたか?そして、これを回避する方法は?

編集

Form1問題は、ctor で親 (私の場合) への参照を知る必要があることです。ctor が完了するまでプロパティが設定されない.Parentため、プロパティを使用できません。そのため、この複雑な方法で親を渡すことを選択しました。.Parentで。

問題はまだ解決していません

4

1 に答える 1

0

あなたはほとんどあなた自身の質問に答えました。

問題は、ctor の親 (私の場合は Form1) への参照を知る必要があることです。ctor が完了するまで .Parent プロパティが設定されないため、.Parent プロパティを使用できません。親をctorに渡す方法。

InitializeComponent メソッドは Form1 のコンストラクターから呼び出され、InitializeComponent 内で「this」への参照を取得しようとしています。問題は、「これ」がまだ作成されていないことだと思います(まだコンストラクターにいるため)。

誰かがすでに述べたように、それに対処する 1 つの方法は、インターフェイスを使用することです。

public class A : UserControl
{
  private MyInterface _myInterface; 

  private A() 
  {
      InitializeComponent();
  }

  public A(MyInterface myInterface) : this() 
  {
     _myInterface = myInterface;
  }
}

次に、フォームにインターフェースを実装させます。

于 2012-12-21T06:33:39.797 に答える