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"?
Indem du dir mal die Dokumentation zu Type.GetProperties anschaust?
(vor allem die überladene Methode mit dem Argument)
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.
Bitte keine Full Quotes. Du bist lang genug dabei.
Danke.
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:
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)
@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).