2009-06-04 15 views
1

Ich schreibe ein BaseForm, das geerbt werden soll. Das BaseForm verfügt über einige grundlegende Standardsteuerelemente für meine Anwendung.Zugriff auf vererbte Winform-Steuerelemente verbieten

Das Problem ist: Ich möchte ererbte Formulare zu verwenden und diese Steuerelemente ändern, aber nicht aus dem Formular entfernen.

Das größte Problem ist ein TabControl, die Registerkarten müssen von Benutzern vererbten Formularen hinzugefügt werden. Wenn ich "Modifiers" -Eigenschaften von TabControl in BaseForm auf privat setzen, können geerbte Formulare keine neuen Tabs hinzufügen. Wenn ich "Modifiers" -Eigenschaften von TabControl auf BaseForm als geschützt festlegen, können die erben Forms das TabControl aus der BaseForm entfernen.

Es gibt einen Weg, um dies zu stoppen? Maßgefertigtes Design?

+0

Können Sie im Visual Studio kein Vorlagenformular erstellen? –

Antwort

4

Gustavo,

Sie sind an der Unterseite des ersten Ausläufer eines Berges Reihe von Problemen stehen, die Sie zwingen Entwickler erfahren werden von einem erben „Basisformularklasse.“ Meiner Erfahrung nach sind auf diese Weise erstellte Frameworks sehr fragil und für Entwickler schwierig zu verwenden.

Ich könnte mir vorstellen, dass Sie dieses besondere Hindernis überwinden können, indem Sie das TabControl privat machen und dann eine öffentliche "Tabs" -Eigenschaft auf dem Formular selbst implementieren, aber ich vermute auch, dass Sie den Gipfel dieses Berges erreichen und realisieren werden dass du viele andere noch höhere Berge vor dir hast. Ich würde vorschlagen, dass Sie den Ansatz insgesamt überdenken.

// set the Modifiers property on tabControl1 to "Private" then implement this 
public TabControl.TabPageCollection TabPages 
{ 
    get { return tabControl1.TabPages; } 
} 

Vererbung verwendet werden soll, bietet gemeinsame Funktionalität, keine einheitliche Zusammensetzung. Sie sollten wirklich in Erwägung ziehen, einen "Kernbildschirm" zu implementieren und Ihr Framework so zu gestalten, dass Entwickler ihre Steuerelemente auf diesem Bildschirm "anstecken" können.

Die Composite UI Application Block ist ein guter Anfang, auch wenn es etwas neueres gibt, das mir nicht bekannt ist.

+0

Vielen Dank für die Kommentare. Mein Projekt ist eine Plug-in-basierte Anwendung. Anwendungen von Drittanbietern werden funktional durch Add-Ons ergänzt. Meine Fragen zu Erbenformularen sind, das Projekt in meiner Firma zu kontrollieren. Ihre Idee ist gut, aber ich möchte Public-Eigenschaften/private-Attribute nicht versuchen, weil ich das visuelle Design verwenden möchte, um das geerbte Formular zu erstellen. –

+0

Es sollte immer noch funktionieren. Wenn das Steuerelement privat ist, wird es in den untergeordneten Formularen gesperrt angezeigt. –

1

Wenn Sie möchten, dass sich Ihre Formulare innerhalb des Visual Studio-Designers "gut" verhalten, haben Sie kein Glück - das Tab Control privat funktioniert, wenn Sie das übergeordnete Formular direkt bearbeiten, aber bei Ihnen scheitern Versuche, Nachkommen zu bearbeiten.

Ich glaube @Michael Meadows ist richtig mit seiner Antwort - nachdem ich in der Vergangenheit komplizierte Frameworks gebaut habe, die nicht liefern konnten, was ich wollte.

Grob gesagt, wo Sie suchen, die Dinge zusammen mit Erbe ziehen, ich glaube, dass Zusammensetzung werden Sie besser dienen. Zumindest ist das meine Erfahrung.

Für leichte Ideen, besuchen Sie Jeremy Millers Reihe von Blog-Posts Build your own CAB - viele gute Materialien.

Verwandte Themen