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/