C
Chris B via .NET 247
(Type your message here)
Hi ive built a custom menubar control that uses a strongly typedHashtable to store the colours needed to paint the control, andi have made this collection available to the proprty grid invs.net by implementing ICustomTypeDescriptor on the collectionand also by creating a class that inherits PropertyDescriptor.
My problem is that i have set thedesignerserializationvisibilityattribute to content, but when itserialises the settings it does it incorrectly
i.e
these are the serialized settings created by vs.net, whichappears to be treating the Hashtable members like they wereactual properties.
visual basic code:
Me.m1.Colours.back = System.Drawing.SystemColors.Control
Me.m1.Colours.clientback = System.Drawing.SystemColors.Control
Me.m1.Colours.disabledback = System.Drawing.Color.LightBlue
Me.m1.Colours.disabledfore =System.Drawing.Color.DarkGray--------------------------------------------------------------------------------
Now the problem with these is that instead of a fullstop inbetween Colours and the Hashtable item there should be either a( for vb or a [ for c# and then the item name in quotes
VB
Me.m1.Colours("DisabledFore") = Color
C#
this.m1.Colours["DisabledFore"] = Color;
Ive experimented with type converters but they just dont seem towork.
heres the code for the type converter
public class ColourCollectionConverter :ExpandableObjectConverter
{
public ColourCollectionConverter()
{
}
public override bool
CanConvertTo( ITypeDescriptorContext context, TypedestinationType )
{
if ( destinationType == typeof( InstanceDescriptor ))
{
return true;
}
else return base.CanConvertTo( context, destinationType );
}
public override boolGetPropertiesSupported(ITypeDescriptorContext context)
{
return true;
}
public override object
ConvertTo( ITypeDescriptorContext context,
System.Globalization.CultureInfo culture, object value, Type
destinationType )
{
int i=0;
if ( destinationType == typeof( InstanceDescriptor ))
{
cbColourCollection points = (cbColourCollection) value;
Color[] values = new Color[ points.Count ];
foreach(Color c in points)
{
values = (Color)c;
i++;
}
return new InstanceDescriptor(typeof(cbColourCollection).GetConstructor( new Type[] {values.GetType() }),new object[] {values },
true );
}
else
return base.ConvertTo (context, culture,value,destinationType);
}
}
Does anyone have any ideas how to get vs to output thiscorrectly?
thanks in advance
From: Chris B
Hi ive built a custom menubar control that uses a strongly typedHashtable to store the colours needed to paint the control, andi have made this collection available to the proprty grid invs.net by implementing ICustomTypeDescriptor on the collectionand also by creating a class that inherits PropertyDescriptor.
My problem is that i have set thedesignerserializationvisibilityattribute to content, but when itserialises the settings it does it incorrectly
i.e
these are the serialized settings created by vs.net, whichappears to be treating the Hashtable members like they wereactual properties.
visual basic code:
Me.m1.Colours.back = System.Drawing.SystemColors.Control
Me.m1.Colours.clientback = System.Drawing.SystemColors.Control
Me.m1.Colours.disabledback = System.Drawing.Color.LightBlue
Me.m1.Colours.disabledfore =System.Drawing.Color.DarkGray--------------------------------------------------------------------------------
Now the problem with these is that instead of a fullstop inbetween Colours and the Hashtable item there should be either a( for vb or a [ for c# and then the item name in quotes
VB
Me.m1.Colours("DisabledFore") = Color
C#
this.m1.Colours["DisabledFore"] = Color;
Ive experimented with type converters but they just dont seem towork.
heres the code for the type converter
public class ColourCollectionConverter :ExpandableObjectConverter
{
public ColourCollectionConverter()
{
}
public override bool
CanConvertTo( ITypeDescriptorContext context, TypedestinationType )
{
if ( destinationType == typeof( InstanceDescriptor ))
{
return true;
}
else return base.CanConvertTo( context, destinationType );
}
public override boolGetPropertiesSupported(ITypeDescriptorContext context)
{
return true;
}
public override object
ConvertTo( ITypeDescriptorContext context,
System.Globalization.CultureInfo culture, object value, Type
destinationType )
{
int i=0;
if ( destinationType == typeof( InstanceDescriptor ))
{
cbColourCollection points = (cbColourCollection) value;
Color[] values = new Color[ points.Count ];
foreach(Color c in points)
{
values = (Color)c;
i++;
}
return new InstanceDescriptor(typeof(cbColourCollection).GetConstructor( new Type[] {values.GetType() }),new object[] {values },
true );
}
else
return base.ConvertTo (context, culture,value,destinationType);
}
}
Does anyone have any ideas how to get vs to output thiscorrectly?
thanks in advance
From: Chris B