2012-03-27 2 views
0

Ich habe eine Business-Schicht mit einem Namespace namens Products. also: Business.ProductsFestlegen der Eigenschaftswerte eines Typs über dynamische UI-Steuerelemente

Mit Reflection lade ich alle Typen (außer Basisklassen, keine abstrakten) in eine Combobox und erwarte, dass der Benutzer einen Typ auswählt (Buch, Essen, Medizin, Sonstiges: alle erbt von der ProductBase-Klasse)) und legen Sie seine Eigenschaften fest und fügen Sie sie einem globalen Auftragsobjekt hinzu, das eine Liste von ProductBase enthält.

Bisher wähle ich den Typ aus Dropdown, und ein groupbox darunter wird mit entsprechenden UI-Steuerelementen, CheckBox für eine bool prop, DateTimePicker für eine Datetime, TextBox für freie Eingabe und so weiter gefüllt. (Ich plaziere die propertyinfo-Instanz auf die Tag-Eigenschaft des Controls.)

Wenn es darum geht, die neue Eigenschaft hinzuzufügen, nachdem UI-Ctrls gesetzt sind, installiere ich ein neues Instace des ausgewählten Typs und beginne seine Eigenschaften einzustellen. Um corr UI ctrl zu finden, durchlaufe ich die Controls in der groupBox und verwende den Tag prop, der die PropertyInfo-Instanz enthält. Kein Problem bisher die zugehörige Kontrolle zu finden. Aber Steuerelemente sind verschiedene Typen (ich gebe die Steuerelemente von einer privaten Methode zurück, die System.WinForms.Control zurückgibt), und ich muss auf seine SelectedDate-Eigenschaft zugreifen, wenn es ein DatePicker, IsChecked-Prop ist, wenn es ein CheckBox ist und so weiter. Ich weiß nicht, was ich jetzt tun soll, ehrlich gesagt :) Bitte hilf einem Bruder hier draußen, danke im Voraus. Frieden!

Hinweis: Ich sehe, dass die meisten Steuerelemente einen Text-Wert haben, auch wenn es ein DatePicker-Textwert wie ein Datum aussieht, aber glaube nicht, dass ich das wirklich verwenden kann.

PS: Dies ist eigentlich eine bekannte Interviewfrage, aber ich möchte diesen Reflection-Ansatz, um alle Arten von zukünftigen Messings mit der Vererbungsstruktur und dem Verschieben/Hinzufügen/Entfernen von Eigenschaften zu unterstützen. Überprüfen Sie hier für die Frage selbst: http://codecrafter.blogspot.com/

Antwort

1

Haben Sie das PropertyGrid-Steuerelement verwendet? Es hat so etwas schon eingebrannt. Es ist auch die typische Windows Environment Art, solche Dinge zu tun. Es interagiert auch ziemlich gut mit dem System.ComponentModel-Namespace, so dass Sie Dinge wie die Beschriftung jeder Eigenschaft, Beschreibung, erlaubte Werte usw. bearbeiten können.

Auch die Reflektion ist etwas langsam, also würde ich nicht t tun dies in großem Maßstab.