2011-01-14 36 views
3

私はWinFormsアプリケーションで同様の効果を達成しようとしていますが、マスターフォームはASP.NETと同じです。私の最初の考えは、基本フォームを作成し、それを抽象として宣言することでしたが、コンパイラは私にこれをさせてくれません。抽象フォームWinFormsを使用して

public abstract partial class Master : Form 
{ 
    public Master() 
    { 
     InitializeComponent(); 
    } 
} 

だから、私は2つの質問があります。

  • はなぜコンパイラは、私がこれをやらせないのだろうか?間違った構文を使用していますか、これは真の制限です。
  • 誰かがこれを行うには回避策またはより良い方法を提案できますか?

EDIT:

のInitializeComponentコード:

private void InitializeComponent() 
    { 
     this.components = new System.ComponentModel.Container(); 
     this.mainMenu1 = new System.Windows.Forms.MainMenu(); 
     this.Menu = this.mainMenu1; 
     this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi; 
     this.Text = "Master"; 
     this.AutoScroll = true; 
    } 

EDIT:

エラーが次のとおりです。私が達成しようとしている

The designer must create an instance of type 'Namespace.Master' but it cannot because the type is declared as abstract. 
+1

実際のコンパイラエラーは何ですか? –

+0

コンパイルしようとしているスニペットが正確であれば、InitializeComponent()の定義を提供する必要があります – asawyer

+0

抽象クラスのpublicコンストラクタについてresharperまたは何か不満がありますか? –

答えて

0

同様のaf WinFormsアプリケーションの をマスターの フォームとしてASP.NETで使用します。

Winformsには本当にマスターページの概念がありません。私はあなたの最善の策がUserControlsを使用し、あなたのUI構成を入れ子にすることを想像します。

サブコントロールへのアクセスを少し簡単にするような単純なインターフェイスを実装することがあります。

public interface IMasterPage 
{ 
IControlContainer Container { get; } 
} 

あなたのプロジェクトにはちょっとした思いがあります。

+0

このアプローチに同意します。しかし、レコードのために、基本フォームクラスを持ち、そこから派生することが可能です。抽象クラスとしてではありません。 .NET Compact Frameworkプロジェクトでは、DesktopCompatible(true)カスタム属性を追加して、デザイナーで基本フォームと派生オブジェクトを使用する必要があります。 – Damon8or

関連する問題