2013-03-17 9 views
5

Einige Kontextgeordnete Liste von Benutzersteuerungen (mit Hinzufügen und Löschen)

ich eine Anwendung erschaffe, die Benutzer erstellen Grundregalanordnungen erlaubt, möchte ich eine Schnittstelle schaffen, die Regalblöcke (ein Satz von Regalen steht) nebeneinander in der Reihenfolge (von links nach rechts) und erlaubt Benutzern, ihre Details zu bearbeiten. Jeder Block hat eine Reihe von Details wie die Reihenfolge, einen Namen, eine Breite, eine Höhe und eine Anzahl von Regalen.

Anforderungen

möchte ich die Schnittstelle eine horizontale Scroll-Liste von (max 20) Bedienelemente haben. Jedes Benutzersteuerelement stellt die Details eines Blocks dar, mit einem Basisformular für die Bearbeitung dieser Details.

Der Benutzer sollte in der Lage sein, eine Taste im Benutzersteuerelement zu drücken, die ihn löscht und die anderen Blöcke neu anordnet und Blöcke am Ende der Liste hinzufügt.

Meine Frage

Wie pflege ich eine geordnete Liste dieser ‚Regalblock‘ Bedienelemente und haben die Form das Drücken der Löschtaste in einem der Kontrollen umgehen, die es verursacht gelöscht werden und die Liste neu geordnet werden? Jede Hilfe wäre großartig.

Screenshot

ich gerade beginnen die Schnittstelle zu programmieren, so dass ich nur eine schnelle Mock-up von zur Verfügung stellen kann, was ich möchte, dass die Schnittstelle aussehen:

enter image description here

so grundlegenden Fragen wie Ich hoffe es gibt dir eine Vorstellung davon, wonach ich suche.

+0

Aktualisiert mit einem Bildschirm-Design. – MarkH

+0

[FlowLayoutPanel] (http://msdn.microsoft.com/en-us/library/system.windows.forms.flowlayoutpanel.aspx), wenn Sie die Datenbindung manuell verarbeiten möchten. Oder [DataRepeater] (http://msdn.microsoft.com/en-us/library/cc488280.aspx). Ich habe 'DataRepeater' nie selbst benutzt, aber es sollte ziemlich reich an Funktionen sein, laut MSDN. – Neolisk

Antwort

0

Sie können eine BindingList verwenden, um Ihre Blöcke zu speichern. Eine BindingList benachrichtigt das UI-Steuerelement (z. B. eine ListBox), dass Daten geändert wurden, z. B. ein gelöschter Block. Die Benutzeroberfläche spiegelt dies wider, indem sie den Block aus der ListBox entfernt. Wenn Sie mit WPF/Silverlight Databinding vertraut sind, ist dies ähnlich, aber nicht ganz dasselbe wie eine ObservableCollection Liste (wenn Sie zielen auf .NET 4, ich glaube, dass Sie ObserverableCollections in einem WinForm ohne viel Ärger aber jemand verwenden können sonst könnte das klären können).

Alternativ können Sie auch BindingSource statt direkt BindingList verwenden.

+0

Hallo, danke für deine schnelle Antwort, ich dachte, dass ein Flowlayoutpanel den Benutzer mehr steuert?Da ich mich nicht damit beschäftigen muss, dass diese Steuerelemente usw. ausgewählt werden, wird es horizontal angeordnet. Sind Sie einverstanden? Wenn ja, was ich gelesen habe, glaube ich nicht, dass eine Bindungsliste mit einem Flow-Layout-Panel funktionieren würde? – MarkH

+1

Ah, ich glaube ich habe es ein bisschen durcheinander gebracht. Ich nahm an, Sie wollten eine Datenstruktur, um die Boxen zu halten und zu pflegen, die dann auf der Benutzeroberfläche angezeigt werden können. Sie können ein FlowLayoutPanel verwenden, wenn Sie möchten, aber es würde bedeuten, direkt mit der Benutzeroberfläche zu interagieren, wenn Sie ein Steuerelement entfernen möchten (z. B. durch Aufrufen von FLowLayoutPanel.Controls.Remove()) und nicht mit einer zugrunde liegenden Datenstruktur. – keyboardP

+0

Ja, es stellt sich heraus, dass ich das Problem komplizierter machte, als es sein musste. Ein Flowlayout voller Benutzersteuerungen genügte, um den zu löschenden UC zu entfernen. Danke für Ihre Hilfe – MarkH

0

Wie wäre es mit einem versteckten Grid-Steuerelement auf Ihrem Formular.
Dann fügen Sie einfach Zeilen in das Raster mit den gewünschten Daten und entfernen alles, und alles wird sehr ordentlich gehalten. Ein Vorteil hier ist, dass für Debugging-Zwecke können Sie immer das Raster sichtbar machen alle Daten schnell zu sehen.

Verwandte Themen