Laden...

Angelegte Properties von UserControl per Schleife abfragen

Erstellt von Gimmick vor 6 Jahren Letzter Beitrag vor 6 Jahren 1.070 Views
G
Gimmick Themenstarter:in
154 Beiträge seit 2015
vor 6 Jahren
Angelegte Properties von UserControl per Schleife abfragen

Moin,

ich würde gerne von beliebig vielen unterschiedlichen UserControls die von mir erstellten properties abfragen.

Beispielsweise sieht das so aus:


public partial class Addierer : UserControl
    {

        private string _Wert = "";
        private string _Funktion = "";

        public string Wert
        {
            get { return _Wert; }
            set { _Wert = value; }
        }

        public string Funktion
        {
            get { return _Funktion; }
            set { _Funktion = value; }
        }
        public Addierer()
        {
            InitializeComponent();
        }

        private void textBox_Wert_TextChanged(object sender, EventArgs e)
        {
            Wert = textBox_Wert.Text;
        }

        private void comboBox_Funktionen_SelectedIndexChanged(object sender, EventArgs e)
        {
            Funktion = comboBox_Funktionen.Text;
        }
    }

Ich habe das so versucht:

/Edit: Ein foreach zuviel reingerutscht, geändert:



foreach (Control UserControl in Controls)
                    {
                               var props = UserControl.GetType().GetProperties();
                               foreach (var prop in props)
                                    {
                                        Object Value = prop.GetValue(UserControl, null);
                                        
                                    }
                                
                      }
                    

Aber das spuckt mir alles aus - inklusive Hintergrundfarbe, Objektname usw.

Wie bekomme ich hier in dem Beispiel nur den Inhalt von "Wert" und "Funktion"?

D
985 Beiträge seit 2014
vor 6 Jahren

Indem du dir mal die Dokumentation zu Type.GetProperties anschaust?

(vor allem die überladene Methode mit dem Argument)

G
Gimmick Themenstarter:in
154 Beiträge seit 2015
vor 6 Jahren

Wie immer die Freundlichkeit in Person, auch wenn du natürlich Recht hast 😁

Hat mit

var props = Element.GetType().GetProperties(System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.DeclaredOnly);

funktioniert.

Hinweis von Abt vor 6 Jahren

Bitte keine Full Quotes. Du bist lang genug dabei.
Danke.

C
26 Beiträge seit 2016
vor 6 Jahren

Hi Gimmick,

ich würde nicht direkt mit Reflection arbeiten - das ist zu langsam.
Es gibt genügend Libraries, die genau für Deinen Anwendungsfall entwickelt worden sind:

https://github.com/mgravell/fast-member

https://github.com/buunguyen/fasterflect

3.003 Beiträge seit 2006
vor 6 Jahren

Zum einen ist Reflection teu(r)er, wenn man Werte setzt - auslesen geht so.
Zum anderen darf bezweifelt werden, dass er tatsächlich soviele Controls hat, dass sich eine extene Bibliothek bezahlt macht. Ich würde behaupten, dass sich bei seinem Einsatzzweck Performancebetrachtungen nicht lohnen.

LaTino

"Furlow, is it always about money?"
"Is there anything else? I mean, how much sex can you have?"
"Don't know. I haven't maxed out yet."
(Furlow & Crichton, Farscape)

D
985 Beiträge seit 2014
vor 6 Jahren

@Gimmick

Die Antwort war doch sehr freundlich.

Ich hätte ja auch ganz lapidar mit [Hinweis] Bitte schau in die SDK-/MSDN-Doku antworten können (2. Eintrag in den FAQs) oder sogar mit [Hinweis] Wie poste ich richtig? Punkt 1.1 (1. Eintrag in den FAQs).