Laden...

Objekte in User COntrolls als eigenschaften.

Erstellt von [ac]sebastian vor 19 Jahren Letzter Beitrag vor 19 Jahren 2.175 Views
[
[ac]sebastian Themenstarter:in
8 Beiträge seit 2005
vor 19 Jahren
Objekte in User COntrolls als eigenschaften.

Hi,

wenn ich ein in einem user control ein int als öffentlich Var. definiere zb so:


[Description( "Breite für die beschriftung einstellen (in % vom steuerelement)")]
		[Category( "Text" )]
		[RefreshProperties(RefreshProperties.All)]
		public int TextWhitdth
		{
			get{	return m_TextWhitdth; }
			set{	m_TextWhitdth = value; Invalidate(); }
		}

dann erscheint die variable des elemtes im designer. und ich kann da eine zahl eigeben.
wenn ich aber nun eine objekt einer klasse übergebezb. so:


public class Point1
	{
		
		[Description( "Anfangsbarbe vom Farbverlauf")]
		[Category( "Allgemein" )]
		[RefreshProperties(RefreshProperties.All)]
		[Browsable(true)]
		private int m_StartFarbe;
		public int StartFarbe
		{
			get{	return m_StartFarbe; }
			set{	m_StartFarbe = value; }
		}
	}


[Description( "Farbes des Textes für die Beschriftung")]
		[Category( "BarFarben" )]
		[RefreshProperties(RefreshProperties.All)]
		[Browsable(true)]
		public Point1 
		{
			get{	return m_FarbBereich1; }
			set{	m_FarbBereich1 = value; Invalidate(); }
		}

dann erscheint im desiger zwar der text und der punkt FarbBereich1, aber ich kann die eigenschaften nicht einstellen, zb. wie bei der klasse point. wo dan so ein kleines '+' zeichen ersheint und man x und y einstellen kann.

Hat jemand für mich einen tipp wie ich die variablen der klasse Point im desiger unter den Punkt FarbBereich1 sichtabr und auswählbar mache?

MfG
Sebastian

333 Beiträge seit 2004
vor 19 Jahren

Versuchs mal mit diesem Attribute:

[TypeConverter(typeof(ExpandableObjectConverter))]

//edit:
Dieses Attribut muß vor die Klasse die du im Designer aufklappen möchtest, nicht vor die Property.

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

[
[ac]sebastian Themenstarter:in
8 Beiträge seit 2005
vor 19 Jahren

@NoOneKnows
vielen vielen dank,
genau das habe ich gesucht,.. in der doku. habe ich nichts gefunden was darauf hindeutet.
du hast mir sehr geholfen.
wenn du noch ne idee dazu hast wäre es ja fast wie weihnachten.
Link zu Topic

MfG
Sebastian

[
[ac]sebastian Themenstarter:in
8 Beiträge seit 2005
vor 19 Jahren

.. so noch ne schlechte nachricht,..
ich sehe jetzt im designer mein objekt mit seinen untervariablen, aber der designer erzeugt keinen code um das objekt zu initialisieren.
somit ist beim start der anwendung mein objekt was ich einstellen will immer mit den defaulteinstellungen der klasse belegt.

Sebastian

333 Beiträge seit 2004
vor 19 Jahren

Dies kannst du mit einem anderen Attribut machen. Du mußt es jedoch vor die Property schreiben. Dadurch legt der Designer die Werte des Objekts einzeln ab und macht nichts mit Serialisierung:

[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]

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

[
[ac]sebastian Themenstarter:in
8 Beiträge seit 2005
vor 19 Jahren

es geht immer noch nicht,

meine klasse sieht jetzt so aus:


[TypeConverter(typeof(ExpandableObjectConverter))]
	[Browsable(true)]
	public class Test
	{

		private int m_SkaleFrequence= 0;
		private int m_SkaleFrequence1=0;
		
		[Description( "gibt an wie viele kleine teilstriche an dem graphen gezeichnet werden")]
		[Category( "Skala" )]
		[RefreshProperties(RefreshProperties.All)]
		[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] 
		public int SkaleFrequence
		{
			get{	return m_SkaleFrequence; }
			set{	m_SkaleFrequence = value; }
		}

		[Description( "gibt an wie viele kleine teilstriche an dem graphen gezeichnet werden")]
		[Category( "Skala" )]
		[RefreshProperties(RefreshProperties.All)]
		[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
		public int SkaleFrequence1
		{
			get{	return m_SkaleFrequence1; }
			set{	m_SkaleFrequence1 = value; }
		}

		public Test(int A, int B)
		{
			m_SkaleFrequence=A;
			m_SkaleFrequence1=B;
		}
	}

vielleicht hat ja jemand noch ne idee

Sebastian

[
[ac]sebastian Themenstarter:in
8 Beiträge seit 2005
vor 19 Jahren

so jetzt habe ich das ergebniss was ich haben wollte, es wird im designer das angezeigt was ich sehen will, und es werden die eingestellten werte als init daten im form abgespeichet.

[Serializable()]

das hat noch gefehlt, es muss nur vor die entsprechende klasse geschrieben werden,.. jetzt geht es.
Ich danke allen die mir geholfen haben.

MfG
Sebastian