Enum dynamisch erstellen

Hallo Experten!

Ich möchte wie im Titel schon angegeben ein Enum dynamisch erstellen.
Ich glaube zwar, dass es nicht unbedingt der Sinn eines Enum ist es dynamisch zu erstellen aber leider benötige ich diese Funktionalität.

Ich habe in diversen Foren leider nichts dazu gefunden…

Außerdem würde mich interessieren ob ich Variablennamen dynamisch angeben kann. Also, ob es zB möglich ist ein „normales“ Enum anhand einer StringVariable, dessen Inhalt der Name des Enum ist, zu addressieren.

Ich hoffe jemand kann mir hier weiterhelfen und danke schonmal für die Mühe.

Mfg

Patrick

Hallo

Ich habe in diversen Foren leider nichts dazu gefunden…

Kein wunder, das geht nämlich nicht.

Für was genau brachst Du „dynamische“ enums???

gruss

Kein wunder, das geht nämlich nicht.

Für was genau brachst Du „dynamische“ enums???

gruss

das dachte ich mir schon…

wahrscheinlich ist die lösung meines problems viel einfacher als ich dachte… ich habe zur darstellung eines objektes das propertygrid verwendet… nun will ich einige combos darin darstellen. prinzipiell funktioniert es wenn ich ein enum mit den einzelnen werten übergebe, habe bisweilen aber keine andere möglichkeit gefunden, dass das propertygrid mir aus einer stringliste (zum Beispiel) eine KomboBox macht…

mfg

patrick

so gehts
hallo

so ist’s richtig :smile:

http://www.codeproject.com/useritems/Using_PropertyG…

gruss

auch guter artikel…
http://msdn.microsoft.com/library/default.asp?url=/l…

gruss

http://msdn.microsoft.com/library/default.asp?url=/l…

gruss

ein wirklich guter artikel…

zeigt wirklich spitze den einsatz eines propertygrids…

aber:

in den beiden artikeln wird einfach eine neue klasse, die von StringConverter abgeleitet wurde erstellt und dort die Werte der Kombobox wie folgt eingetragen:

 public override StandardValuesCollection GetStandardValues (ITypeDescriptorContext context)
{
 return new StandardValuesCollection (new string[]
 {"Value1","Value2","Value3"});
}

das problem hierbei ist nur, dass ich als übergeber des objektes an das propertygrid nur den typ des converter angeben kann (in dem fall halt die erstellte klasse) nicht aber ein converter objekt, welches ich dann mit einem dynamischen string[] füllen könnte. also ich kapier einfach nicht wie man hier den inhalt dieser kombobox dynamisch angeben könnte…

möglicherweise sieht ja jemand wie ich das machen könnte…

mfg
patrick

hallo

du kannst ja das string Array Dynamisch zusammenstellen „Select * from irgendwo“ oder sowas in der art?
oder sehe ich das problem nicht?

gruss, Giuseppe

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

hallo

du kannst ja das string Array Dynamisch zusammenstellen
„Select * from irgendwo“ oder sowas in der art?
oder sehe ich das problem nicht?

gruss, Giuseppe

das dynamische füllen des arrays wäre kein problem hätte ich zugriff auf das array. da ich dem propertygrid nur sage: verwende diesen Typ (zB klasse MyStringConverter)nicht aber diesen converter (also schon ein erzeugtes objekt(also MyStringConverter obj = new MyStringConverter()); kann ich auch die StandardValuesCollection nicht verändern.

Ich kann weder den Konstruktor des Converter Objektes noch den inneren Ablauf so verändern, dass ich diese Werte dynamisch setzen könnte…

ich meine damit, natürlich könnte ich beispielsweise aus einer datenbank die werte holen und dort rein speichern, aber wie soll ich dem converter objekt jemals eine datenquelle anbieten, wenn ich das objekt gar nicht erzeugen darf…

ich hoffe das macht es ein wenig verständlicher

mfg

patrick

hallo

wieso nicht so?

public override StandardValuesCollection GetStandardValues (ITypeDescriptorContext context)
{
 SqlConnection cnn = new SqlConnection(cnnstring);
 SqlCommand cmd = new sqlCommand("select \*..", cnn);
 return MachStandardValuesCollection(cmd.ExecuteReader());
}

private StandardValuesCollection MachStandardValuesCollection(SqlDataReader r)
{
 // mach objekt
}

Gruss, Giuseppe

ja stimmt schon…so würde es gehen…

aber wenn ich beispielsweise steuerinformationen von außerhalb benötige (zB der connectionstring), kann ich es nicht mehr, da ich der klasse keine informationen übergeben kann…

(im projekt verwende ich so eine art mediator Entwurfsmuster… dieser mediator steuert/kontrolliert alle operationen zwischen datenbank und funktionalität— ) deshalb kann/soll ich auch nicht auf die datenbank zugreifen ohne diesen mediator zu verwenden… aber ich kann der klasse ja kein attribut anhängen.

einfach gesagt… wenn ich die kombobox mit daten befüllen möchte die nicht direkt aus dem objekt MyStringConverter entstammen, damit meine ich auch eine datenbankabfrage aus dem ding kann ich es nicht ¿

am liebsten wäre es mir wenn dieser converter einfach eine has-a beziehung mit einem anderen objekt hat, welches dann die werte liefert… aber sowas darf ich ja nicht machen, weil ich das converter objekt selbst gar nicht erzeuge…

vielleicht hast du ja noch eine idee, ansonsten vielen dank für die mühe

mfg
patrick

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

mit einem singleton?
hallo

I see your problem… Du könntest ein Singleton Objekt dafür vergewaltigen. „Von Aussen“ gibst Du dem Singleton die Anweisungen oder direkt das Array mit und der StringConverter holt es sich dann ab… somit erfüllst Du deine Anforderungen.

Gruss
Giuseppe

1 Like

MIT EINEM SINGLETON!
hallo

jawohl! das ist es… Ein singleton. Ist schon implementiert und funktioniert…

Danke für den Tipp, ich hätte da bestimmt noch stundenlang gegrübelt…

Gruss

Patrick