Benutzer mit den meisten Antworten
vererbung Fenster...

Frage
-
Hallo,
eine Frage noch mal zum Vererben von Windowsform´s ...
Habe eine Basisfensterklasse erstellt und dem ein Contextmenü verpasst.
Jetzt erstellte ich ein neues Form und ändere im Code das INHERIT dann manuell ab.
Soweit alles schickt, nur leider erbt das neue Fenster das contextmenü nicht mit.
Muss ich das ebenfalls irgendwie manuell nachsteuern ?Danke !
Mario
Antworten
-
Hallo Mario,
Habe eine Basisfensterklasse erstellt und dem ein Contextmenü verpasst.
Jetzt erstellte ich ein neues Form und ändere im Code das INHERIT dann manuell ab.
Soweit alles schickt, nur leider erbt das neue Fenster das contextmenü nicht mit.
Damit das geerbte ContextMenu(Strip) im Designer des erbenden Formulars auftaucht, musst Du die Modifiers Eigenschaft für das ContextMenu(Strip) im Basisformular auf [Protected] bzw. [Protected Friend] setzen. Hast Du das gemacht?
Thorsten Dörfler
Microsoft MVP Visual Basic
vb-faq.de- Als Antwort markiert Robert Breitenhofer Donnerstag, 8. Juli 2010 15:29
-
Hallo Mario,
beende ggf. die Entwicklungsumgebung. Durch Cachen von Informationen im Designer
kommt es dort schnell zu Merkwürdigkeiten. Weswegen ich i. a. eher von Vererbung
auf Formular/UserControl Ebene absehen würde.Hinzukommen einige Einschränkungen, was den Designer angeht.
Wenn Du bei einem vererbten Formular versuchst ein [Context]MenuStrip zu erweitern,
so erzeugt der Designer zwar den Code fürs Erzeugen des MenuStripItems -
findet man wenn man sich InitializeComponent oder die Auflistung im Eigenschaftsfenster anschaut.
Er ist aber nicht in der Lage, es an das bereits bestehende MenuStrip Auflistung anzufügen,
womit am Ende nur eine Menge "Leichen" im Code entstehen.
(Gerade noch .NET 4.0/VS 2010 getestet und immer noch verkehrt ;-((Gesünder ist es im allgmeinen auf die Vererbung dort zu verzichten
und sich daran zumachen das weitere via Code zu erstellen - was auch kein Hexenwerk ist:Public Class FormInherited Private WithEvents eineMessageBoxToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem Private Sub FormInherited_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Me.eineMessageBoxToolStripMenuItem = New ToolStripMenuItem("Noch eine MessageBox") With {.Name = "eineMessageBoxToolStripMenuItem"} ' Der ContextMenuStrip im geerbten Formular MyBase.mainContextMenuStrip.Items.Add(Me.eineMessageBoxToolStripMenuItem) End Sub Private Sub NochEineMessageBoxToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _ Handles eineMessageBoxToolStripMenuItem.Click MessageBox.Show(Me, "Noch eine MessageBox") End Sub End Class
Mehr siehe Visuelle Vererbung in Windows Forms
Gruß Elmar
- Als Antwort markiert Robert Breitenhofer Donnerstag, 8. Juli 2010 15:29
Alle Antworten
-
Hallo Mario,
Habe eine Basisfensterklasse erstellt und dem ein Contextmenü verpasst.
Jetzt erstellte ich ein neues Form und ändere im Code das INHERIT dann manuell ab.
Soweit alles schickt, nur leider erbt das neue Fenster das contextmenü nicht mit.
Damit das geerbte ContextMenu(Strip) im Designer des erbenden Formulars auftaucht, musst Du die Modifiers Eigenschaft für das ContextMenu(Strip) im Basisformular auf [Protected] bzw. [Protected Friend] setzen. Hast Du das gemacht?
Thorsten Dörfler
Microsoft MVP Visual Basic
vb-faq.de- Als Antwort markiert Robert Breitenhofer Donnerstag, 8. Juli 2010 15:29
-
Hallo Thorsten,
nein hatte ich nicht, aber selbst wenn ich die Modifiers Eigenschaft auf Protected oder Protected Friend setze ( neu erstellt habe ich dannach ), dann taucht nix im geerbten Fenster auf.
Muss ich im geerbten Fenster denn noch was einstellen oder anpassen ?
bye,
Mario
-
Hallo Mario,
nein hatte ich nicht, aber selbst wenn ich die Modifiers Eigenschaft auf Protected oder Protected Friend setze ( neu erstellt habe ich dannach ), dann taucht nix im geerbten Fenster auf.
ich habe es hier getestet und es funktioniert, wie beschrieben. Kannst Du ein Beispiel bereitstellen (Download via Skydrive z.B.), wo dies nachvollziehbar ist?
Thorsten Dörfler
Microsoft MVP Visual Basic
vb-faq.de -
Hallo Mario,
beende ggf. die Entwicklungsumgebung. Durch Cachen von Informationen im Designer
kommt es dort schnell zu Merkwürdigkeiten. Weswegen ich i. a. eher von Vererbung
auf Formular/UserControl Ebene absehen würde.Hinzukommen einige Einschränkungen, was den Designer angeht.
Wenn Du bei einem vererbten Formular versuchst ein [Context]MenuStrip zu erweitern,
so erzeugt der Designer zwar den Code fürs Erzeugen des MenuStripItems -
findet man wenn man sich InitializeComponent oder die Auflistung im Eigenschaftsfenster anschaut.
Er ist aber nicht in der Lage, es an das bereits bestehende MenuStrip Auflistung anzufügen,
womit am Ende nur eine Menge "Leichen" im Code entstehen.
(Gerade noch .NET 4.0/VS 2010 getestet und immer noch verkehrt ;-((Gesünder ist es im allgmeinen auf die Vererbung dort zu verzichten
und sich daran zumachen das weitere via Code zu erstellen - was auch kein Hexenwerk ist:Public Class FormInherited Private WithEvents eineMessageBoxToolStripMenuItem As System.Windows.Forms.ToolStripMenuItem Private Sub FormInherited_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Me.eineMessageBoxToolStripMenuItem = New ToolStripMenuItem("Noch eine MessageBox") With {.Name = "eineMessageBoxToolStripMenuItem"} ' Der ContextMenuStrip im geerbten Formular MyBase.mainContextMenuStrip.Items.Add(Me.eineMessageBoxToolStripMenuItem) End Sub Private Sub NochEineMessageBoxToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _ Handles eineMessageBoxToolStripMenuItem.Click MessageBox.Show(Me, "Noch eine MessageBox") End Sub End Class
Mehr siehe Visuelle Vererbung in Windows Forms
Gruß Elmar
- Als Antwort markiert Robert Breitenhofer Donnerstag, 8. Juli 2010 15:29