How to create a tree- Dialogfeld "Einstellungen anzeigen" Typ der Schnittstelle in C #?

Translate

Ich schreibe eine Anwendung, die im Grunde nur ein Einstellungsdialog ist, ähnlich dem Einstellungsdialog in der Baumansicht, den Visual Studio selbst verwendet. Die Funktion der Anwendung ist einfach ein Durchgang für Daten von einem seriellen Gerät in eine Datei. Es führt viele, viele Transformationen an den Daten durch, bevor sie in die Datei geschrieben werden. Die GUI für die Anwendung enthält also einfach alle Einstellungen, die festlegen, wie diese Transformationen aussehen sollen.

Was ist der beste Weg, um einen Dialog mit den Einstellungen für die Baumansicht zu entwerfen / zu codieren? So wie ich es gemacht habe, baue ich das Hauptfenster mit einem angedockten Baumsteuerelement auf der linken Seite. Dann habe ich Containersteuerelemente erstellt, die jedem Knoten des Baums entsprechen. Wenn ein Knoten ausgewählt ist, bringt die App das entsprechende Containersteuerelement dieses Knotens nach vorne, verschiebt ihn an die richtige Position und maximiert ihn im Hauptfenster. Dies scheint wirklich sehr, sehr klobig beim Entwerfen. Das bedeutet im Grunde, dass ich während der Entwurfszeit Tonnen von Containersteuerelementen jenseits des Randes des Hauptfensters habe, zu denen ich das Hauptfenster weiter scrollen muss, um mit ihnen arbeiten zu können. Ich weiß nicht, ob dies völlig sinnvoll ist, wie ich das schreibe, aber vielleicht macht dieses Bild für das, worüber ich spreche, mehr Sinn:

form design

Grundsätzlich muss ich mit diesem riesigen Formular arbeiten, mit Container-Steuerelementen überall, und dann eine Reihe von Laufzeit-Neuformatierungen durchführen, damit alles funktioniert. Dies scheint wie einMengevon zusätzlicher Arbeit. Mache ich das total dumm? Gibt es einen "offensichtlichen" einfacheren Weg, dies zu tun, den ich vermisse?

This question and all comments follow the "Attribution Required."

Alle Antworten

xyz
Translate

Eine übersichtlichere Möglichkeit besteht darin, separate Formulare für jedes 'Fenster' zu erstellen und in jedem Formularkonstruktor zu setzen

this.TopLevel = false;
this.FormBorderStyle = FormBorderStyle.None;
this.Dock = DockStyle.Fill;

Auf diese Weise kann jedes dieser Formulare in einem eigenen Designer angelegt, zur Laufzeit ein- oder mehrmals instanziiert und wie ein normales Steuerelement zum leeren Bereich hinzugefügt werden.

Vielleicht könnte die Hauptform a verwendenSplitContainermit einer statischenTreeViewin einem Bereich und Platz, um diese Formulare im anderen hinzuzufügen. Sobald sie hinzugefügt wurden, können sie mit verwendet werdenHide/ShowoderBringToFront/SendToBackMethoden.

SeparateForm f = new SeparateForm(); 
MainFormSplitContainer.Panel2.Controls.Add(f); 
f.Show();
Quelle
Translate

Greg Hurlman schrieb:

Warum nicht einfach den richtigen Container ein- / ausblenden, wenn ein Knoten im Raster ausgewählt ist? Lassen Sie die Container alle an derselben Stelle entsprechend dimensionieren und alle außer der Standardeinstellung ausblenden, die beim Laden im Raster vorausgewählt wird.

Leider versuche ich das zu vermeiden. Ich suche nach einer einfachen Möglichkeit, die Benutzeroberfläche während der Entwurfszeit zu handhaben, wobei nur ein minimaler Neuformatierungscode erforderlich ist, damit sie zur Laufzeit funktioniert.

Ich mag Duncans Antwort, weil dadurch das Design der Schnittstelle jedes Knotens beibehalten werden kannvollständigtrennen. Dies bedeutet, dass sich die Fangrichtlinien und andere Vorteile der Entwurfszeit nicht überschneiden.

Quelle
Translate

Ich würde wahrscheinlich mehrere Panelklassen basierend auf einer Basisklasse erstellen, die CustomControl erbt. Diese Steuerelemente hätten dann Methoden wie Speichern / Laden und ähnliches. Wenn ja, kann ich jedes dieser Paneele separat gestalten.

Ich habe ein Assistentensteuerelement verwendet, das im Entwurfsmodus mehrere Seiten verarbeitet hat, sodass man im Designer auf Weiter klicken und alle Seiten gleichzeitig über den Designer entwerfen kann. Obwohl dies beim Verbinden von Code mit den Steuerelementen mehrere Nachteile hatte, bedeutet dies wahrscheinlich, dass Sie ein ähnliches Setup haben könnten, indem Sie einige Designer-Klassen erstellen. Ich habe selbst noch nie Designer-Kurse in VS geschrieben, daher kann ich nicht sagen, wie oder ob es sich lohnt :-)

Ich bin ein wenig neugierig, wie Sie mit dem Laden / Speichern von Werten in / aus den Steuerelementen umgehen möchten. Es muss viel Code in einer Klasse geben, wenn alle Ihre Seiten in einer großen Form vorliegen?

Und noch eine andere Möglichkeit wäre natürlich, den GUI-Code zu generieren, wenn jede Seite angefordert wird, und Informationen darüber zu verwenden, welche Art von Einstellungen es gibt.

Quelle