Laden...

Verflixted enum!

Erstellt von Guggsdu vor 19 Jahren Letzter Beitrag vor 19 Jahren 3.083 Views
Guggsdu Themenstarter:in
220 Beiträge seit 2004
vor 19 Jahren
Verflixted enum!

Tach zusammen!

Ich bin am verzweifeln!

Ich habe ein Usercontrol erstellt. Dem Usercontrol habe ich im Deklarationsteil ein enum verpaßt:

public enum TestEnum {eins, zwei, drei}
private TestEnum enumProp = eins;

Das Usercontrol erhält außerdem eine Eigenschaft, die auf dieses Enum zurückgreift:

public TestEnum EnumProp {get...; set...;}

Wenn ich nun mein Usercontrol auf eine Form pflanze, müßte ich ja mit dem Eigenschaftenfenster die Eigenschaft 'EnumProp' einstellen können.

Soweit funktioniert das auch. Wenn sich nun aber die Form IM DESIGNER (jawoll: im Designer) neu zeichnen muß (z. B. nach dem Compilieren oder einfach mal in den Code wechseln und zurück zum Designer), dann setzt sich meine Eigenschaft 'EnumProp' automatisch zurück auf den Defaultwert bzw. auf den Wert, der im enum der 0 entspricht.

Ich kriege es einfach nicht hin, daß der Enum-Wert dauerhaft gespeichert wird.

Kann mir jemand weiterhelfen? Bin für jeden Brainstorming-Tip dankbar.

Gruß
Guggsdu

Gruß
Guggsdu

F
529 Beiträge seit 2003
vor 19 Jahren

Dem Enum einen Standartwert zuweisen funzt net? Kannst ja mal im Quelltext gucken, ob denn überhaupt dein neuer Wert eingearbeitet wird....

Besuchen sie das VisualC++ - Forum

381 Beiträge seit 2004
vor 19 Jahren

Ich könnte mir vorstellen das es an deiner Zuweisung liegt:


public enum TestEnum {eins, zwei, drei}

// Hier erster evtl. Fehler
// private TestEnum enumProp = eins;

// Solltest du so schreiben;
private TestEnum enumProp = TestEnum.eins;

// Deine Eigenschaft sollte dann natürlich das gleiche machen
public TestEnum EnumProp
{
  get { return this.enumProp; }
  set { this.enumProp = value; }
}

// public TestEnum EnumProp {get...; set...;}

Also bei mir funktioniert das ...

Mit freundlichen Grüßen

René Paschold
.NET Developer / Trainer / Speaker / Author /
Projectleader / Software-Architect


.blog http://www.rene-paschold.de/
.business http://www.smarthouse.de/

N
4.644 Beiträge seit 2004
vor 19 Jahren

Bei mir funktioniert das auch. Mit Deiner Zuweisung dürfte es aber garnicht compiliert werden.

381 Beiträge seit 2004
vor 19 Jahren

Mit meiner oder seiner? Meine lief 😁

Mit freundlichen Grüßen

René Paschold
.NET Developer / Trainer / Speaker / Author /
Projectleader / Software-Architect


.blog http://www.rene-paschold.de/
.business http://www.smarthouse.de/

N
4.644 Beiträge seit 2004
vor 19 Jahren

Original von Rene Paschold
Mit meiner oder seiner? Meine lief 😄

Mit seiner.

Guggsdu Themenstarter:in
220 Beiträge seit 2004
vor 19 Jahren

Nee Jungs, bei mir funktioniert das einfach nicht. Ich habe jetzt folgenden Code ausprobiert:


public enum TestEnum {eins, zwei, drei}
private TestEnum enumProp = TestEnum.eins;

[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public TestEnum EnumProp {
	get {
		return this.enumProp;
	}
	set {
		this.enumProp = value;
	}
}

und es funzt ni!

Ich hoffe wir verstehen uns richtig: Ich füge mein Usercontrol in ein Form ein, stelle die Eigenschaft EnumProp auf 'drei', compiliere und schon steht 'EnumProp' wieder auf eins.
Im Übrigen wird selbst beim setzen der EnumProp-Eigenschaft im Eigenschaftenfenster kein Code im 'InitializeComponent' - Bereich erzeugt.

Habt ihr noch weitere Vorschläge?

Gruß
Guggsdu

PS.: Ich habs mal auf nem anderen Rechner im VS probiert. Dort geht's auch nicht. Ich habe dann mal im 'InitializeComponent'-Bereich unter dem UserControl den Eintrag gemacht:
_
this.userControl11.EnumProp = UserControl1.TestEnum.drei;_

Da kriege ich folgende Fehlermeldung:
**
The variable 'drei' is either undeclared or was never assigned.**

Gruß
Guggsdu

L
667 Beiträge seit 2004
vor 19 Jahren

Dein Code funktioniert bei mir problemlos (VS.NET 2003) und auch im Designer merkt er sich problemlos jede Variable ...

"It is not wise to be wise" - Sun Tzu

Guggsdu Themenstarter:in
220 Beiträge seit 2004
vor 19 Jahren

Aha, ich habs:

Das enum muß außerhalb der Klasse definiert sein!
Is ja eigentlich auch klar: Ich versuche beim Erstellen einer KLasse auf einen Typ zuzugreifen, der erst innerhalb der Klasse definiert ist.

Na jedenfalls ist die Woche gerettet.

Gruß
Guggsdu

Gruß
Guggsdu

L
667 Beiträge seit 2004
vor 19 Jahren

🙂 Hättst Du gleich geschrieben, dass Du das Enum innerhlab der Klasse definierst wärs sofort klar gewesen 🙂

"It is not wise to be wise" - Sun Tzu

381 Beiträge seit 2004
vor 19 Jahren

Du kannst Enums auch innerhalb der Klasse definieren und dann über die Klasse drauf zugreifen:


public class MeineKlasse
{
	public enum Tage
	{
		Montag,
		Dienstag
	}
}

Zugriff dann aber über den Klassennamen:


private void button1_Click(object sender, System.EventArgs e)
{
	MessageBox.Show(MeineKlasse.Tage.Dienstag.ToString());
}

Mit freundlichen Grüßen

René Paschold
.NET Developer / Trainer / Speaker / Author /
Projectleader / Software-Architect


.blog http://www.rene-paschold.de/
.business http://www.smarthouse.de/

333 Beiträge seit 2004
vor 19 Jahren

@Rene:
Aber der VS Designer wird damit wohl so seine Probleme haben. Bei einem Test mit VC# Express 2005 hat ich auch das Problem, das er das Formular nicht mehr laden konnte, wenn das Enum innheralb des Usercontrols definiert und eine betreffenden Eigenschaft mit dem Enum-Typ im Designer einen anderen Wert zugewiesen wurde. War das enum außerhalb des Usercontrols, gab es keine Probleme.

([bb]|[^b]{2})

Guggsdu Themenstarter:in
220 Beiträge seit 2004
vor 19 Jahren

... und genau das war auch mein Problem. Der Designer hat Späne gemacht, weil er eine KLasse mit Hilfe eines enums erstellen sollte, welches aber erst in der Klasse definiert wurde.

So erkläre ich mir das.

Gruß
Guggsdu

Gruß
Guggsdu