Laden...

eigene Menü-Komponente erstellen

Letzter Beitrag vor 9 Jahren 4 Posts 1.358 Views
eigene Menü-Komponente erstellen

Hallo zusammen,

ich möchte gerade eine eigene Menükomponente erstellen. Diese beinhaltet Items auf nur zwei Ebenen. Zum einen eine Liste von "HeaderItems" und die beinhalten jeweils eine Liste von "NavItems"

Die beiden Klassen "HeaderItem" und "NavItem" leite ich jeweils von System.ComponentModel.Component ab.

(Code ganz stark vereinfacht)

public class HeaderItem: Component
{
	public HeaderItem()
	{
		Items = new List<NavItem>();
	}

	[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
	public List<NavItem> Items { get; set; }
	
	...
}
public class NavItem: Component
{
	public string Text { get; set; }
	public event EventHandler Click;
}

So weit so gut. Damit kann ich dann, wenn meine Komponente in den Designer ziehe, meine HeaderItems anlegen und bei denen jeweils die dazugehörigen Items.
Aber um den EventHandler zu setzen, kann ich nur in der Komponentenleiste unter dem FormDesigner die einzelnen Komponenten anklicken und dann bearbeiten.

Wie kann man einen Editor realisieren, wie es zum Beispiel bei ToolStrip oder beim MenuStrip der Fall ist? Kennt jemand dazu vielleicht ein Tutorial?

Oder sollte man dafür einen ganz anderen Weg gehen?

Mir ist nicht ganz klar, worauf du hinaus willst:
Für die Anlage von NavItems öffnet sich ein kleines Fenster - in dem du auch gerne den EventHandler anhängen möchtest?

Wenn ja, dann geht genau das im ToolStrip oder MenuStrip doch ebenfalls nicht. 🤔

Vielleicht ein bisschen ungünstig ausgedrückt...
Ich möchte eine Editorkomponente erstellen, wie es bei ToolStrip oder MenuStrip auch der Fall ist. Das heißt, dass ich im Designer die Möglichkeit bieten möchte, dass man direkt Menüpunkte hinzufügt und bearbeitet.
Beim ToolStrip zum beispiel wird ja im Designer eine Schaltfläche angezeigt, über die man Komponenten zum ToolStrip hinzufügen kann und dann auch entsprechend die Events setzen kann.
Mir fehlt da allerdings vollkommen der Ansatz, wie man so etwas macht.

Du meinst das? =)

Wenn ja, schaue dir mal diese beiden Dinge an:
DesignerAttribute
ControlDesigner