Wie erstelle ich in C# eine Schnittstelle vom Typ „Baumansicht-Einstellungsdialog“?

StackOverflow https://stackoverflow.com/questions/3725

  •  08-06-2019
  •  | 
  •  

Frage

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

Was ist der beste Weg, um einen Einstellungsdialog für die Baumansicht zu entwerfen/kodieren?Ich habe das so gemacht, dass ich das Hauptfenster mit einem angedockten Baumsteuerelement auf der linken Seite erstellt habe.Dann habe ich Containersteuerelemente erstellt, die jedem Knoten des Baums entsprechen.Wenn ein Knoten ausgewählt wird, bringt die App das entsprechende Containersteuerelement dieses Knotens in den Vordergrund, verschiebt es an die richtige Position und maximiert es im Hauptfenster.Das scheint beim Entwerfen wirklich sehr, sehr klobig zu sein.Das bedeutet im Grunde, dass ich während der Entwurfszeit über den Rand des Hauptfensters hinaus jede Menge Containersteuerelemente habe, zu denen ich ständig durch das Hauptfenster scrollen muss, um mit ihnen arbeiten zu können.Ich weiß nicht, ob das so, wie ich es schreibe, völlig Sinn ergibt, aber vielleicht ergibt dieses Bild für das, worüber ich spreche, mehr Sinn:

form design

Im Grunde muss ich mit diesem riesigen Formular arbeiten, mit Container-Steuerelementen überall, und dann eine Reihe von Neuformatierungen zur Laufzeit durchführen, damit alles funktioniert.Das scheint ein viel von zusätzlicher Arbeit.Mache ich das auf eine völlig dumme Art und Weise?Gibt es eine „offensichtliche“ einfachere Möglichkeit, die mir fehlt?

War es hilfreich?

Lösung

Eine übersichtlichere Möglichkeit besteht darin, für jeden „Bereich“ und in jedem Formularkonstruktorsatz separate Formulare zu erstellen

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 einmal oder mehrmals instanziiert und wie ein normales Steuerelement in den leeren Bereich eingefügt werden.

Vielleicht könnte das Hauptformular a verwenden SplitContainer mit einer Statik TreeView in einem Panel und Platz zum Hinzufügen dieser Formulare im anderen.Sobald sie hinzugefügt wurden, können sie mit durchgeblättert werden Hide/Show oder BringToFront/SendToBack Methoden.

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

Andere Tipps

Greg Hurlman schrieb:

Warum nicht einfach den richtigen Container ein-/ausblenden, wenn ein Knoten im Raster ausgewählt ist?Sorgen Sie dafür, dass alle Behälter die richtige Größe haben und sich an derselben Stelle befinden, und blenden Sie alle aus, mit Ausnahme der Standardgröße, die beim Laden im Raster vorausgewählt wird.

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

Ich mag Duncans Antwort, weil sie bedeutet, dass das Design der Schnittstelle jedes Knotens beibehalten werden kann vollständig separate.Dies bedeutet, dass es bei den Fangrichtlinien und anderen Vorteilen der Entwurfszeit zu keinen Überschneidungen kommt.

Ich würde wahrscheinlich mehrere Panel-Klassen erstellen, die auf einer Basisklasse basieren, die CustomControl erbt.Diese Steuerelemente hätten dann Methoden wie Speichern/Laden und ähnliches.Wenn ja, kann ich jedes dieser Panels separat entwerfen.

Ich habe ein Assistenten-Steuerelement verwendet, das im Entwurfsmodus mehrere Seiten verwaltete, sodass man im Designer auf „Weiter“ klicken und alle Seiten gleichzeitig über den Designer entwerfen konnte.Obwohl dies beim Verbinden von Code mit den Steuerelementen mehrere Nachteile mit sich brachte, bedeutet dies wahrscheinlich, dass Sie durch die Erstellung einiger Designerklassen eine ähnliche Einrichtung erreichen könnten.Ich selbst habe noch nie Designer-Kurse in VS geschrieben, daher kann ich nicht sagen, wie das geht und ob es sich lohnt :-)

Ich bin ein wenig neugierig, wie Sie das Laden/Speichern von Werten in/von den Steuerelementen handhaben wollen?Muss eine Klasse viel Code enthalten, wenn alle Ihre Seiten in einem großen Formular vorliegen?

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top