2011-01-14 13 views
3

Ich versuche, eine ähnliche Wirkung in einer WinForms-Anwendung wie ein Master-Formular mit ASP.NET zu erreichen. Meine anfänglichen Überlegungen dazu waren, eine Basisform zu erstellen und sie als abstrakt zu erklären, aber der Compiler scheint mir das nicht zu erlauben.Abstrakte Formulare mit WinForms

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

So habe ich zwei Fragen:

  • Warum wird der Compiler mir dies nicht tun lassen? Benutze ich die falsche Syntax oder ist das eine echte Einschränkung?
  • Kann jemand einen Workaround oder einen besseren Weg vorschlagen, dies zu tun?

EDIT:

InitializeComponent Code:

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:

Der Fehler wird wie folgt dar:

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

Was ist der eigentliche Compilerfehler? –

+0

Wenn das der genaue Ausschnitt ist, den Sie kompilieren möchten, müssen Sie eine Definition für InitializeComponent() angeben. – asawyer

+0

Vielleicht nachschärfen oder etwas beschweren über öffentlichen Konstruktor in der abstrakten Klasse? –

Antwort

0

Ich versuche, ein zu erreichen ähnlich af fect in einer WinForms-Anwendung als Master Formular mit ASP.NET.

Winforms hat nicht wirklich das Konzept einer Masterseite. Ich kann mir vorstellen, dass Sie am besten UserControls verwenden und Ihre UI-Komposition verschachteln.

Vielleicht implementieren Sie eine einfache Schnittstelle wie etwas, um den Zugriff auf die Untersteuerungen ein wenig einfacher zu machen.

public interface IMasterPage 
{ 
IControlContainer Container { get; } 
} 

Nur ein paar Gedanken, viel Glück mit Ihrem Projekt.

+0

Stimmen Sie diesem Ansatz zu. Aber für die Aufzeichnung ist es möglich, eine Basisformklasse zu haben und davon abzuleiten, nur nicht als eine abstrakte Klasse. In .NET Compact Framework-Projekten müssen Sie das benutzerdefinierte Attribut DesktopCompatible (true) hinzufügen, um das Basisformular und davon abgeleitete Elemente im Designer zu verwenden. – Damon8or

Verwandte Themen