Problem beim TypeConverter.

08/08/2009 - 13:28 von Lars Steinmetz | Report spam
Hallo NG,

ich habe eine Komponente, die ein Property besitzt, an dem ein
TypeConverter bei Attribute dran hàngt. Diese wird in einem PropertyGrid
angezeigt.

public class MyComponent2
{
private Class1 c1;

[TypeConverter(typeof(MyComponent2TypeConverter))]
public Class1 Element
{
get { return this.c1; }
set
{
this.c1 = value;
if(this.c1 == null)
System.Diagnostics.Debug.WriteLine("NULL");
else
System.Diagnostics.Debug.WriteLine(c1.Text);
}
}
}

Der TypeConverter soll die zur Verfügung stehenden Instanzen anbieten
und zusàtzlich null erlauben. Der null-Wert soll als "(Ohne)"
dargestellt werden:

public class MyComponent2TypeConverter : TypeConverter
{
public override bool CanConvertFrom(ITypeDescriptorContext context,
Type sourceType)
{
if (sourceType == typeof(string))
return true;
else
return base.CanConvertFrom(context, sourceType);
}

public override object ConvertFrom(ITypeDescriptorContext context,
System.Globalization.CultureInfo culture, object value)
{
if (value == null)
return null;
string text = value as string;
if (text != null)
{
if (text == "(Ohne)")
return null;
foreach (object elem in this.GetStandardValues())
{
Class1 c1 = elem as Class1;
if (c1 != null && c1.Text == text)
return c1;
}
}
return base.ConvertFrom(context, culture, value);
}

public override object ConvertTo(ITypeDescriptorContext context,
System.Globalization.CultureInfo culture, object value, Type
destinationType)
{
if (destinationType == typeof(string))
{
if (value == null)
return "(Ohne)";

Class1 c1 = value as Class1;
if (c1 != null)
return c1.Text;
}
return base.ConvertTo(context, culture, value, destinationType);
}

public override bool
GetStandardValuesSupported(ITypeDescriptorContext context)
{ return true; }

public override bool
GetStandardValuesExclusive(ITypeDescriptorContext context)
{ return true; }

public override StandardValuesCollection
GetStandardValues(ITypeDescriptorContext context)
{
ArrayList elems = new ArrayList();
elems.Add("(Ohne)");
elems.Add(new Class1("Entweder"));
elems.Add(new Class1("Oder"));
return new StandardValuesCollection(elems);
}
}

Es funktioniert soweit alles wunderbar, die Combobox im Propertygrid
zeigt alles richtig an und ein Elemente lassen sich auswàhlen. Prima!

Nun zum Problem(chen):

Normalerweise lassen sich die Elemente einer Combobox im Propertygrid
auch der Reihe nach durchschalten, indem man auf den Propertynamen
doppelklickt. Dies führt in meinem Fall aber zu einer Fehlermeldung:

"Unglültiger Eigenschaftenwert"

Details: "Das Objekt mit dem Typ 'System.String' kann nicht in den Typ
'WindowsFormsApplication1.Class1' konvertiert werden."

Was mache ich falsch, bzw was fehlt noch?

Velen Dank!

Gruß Lars
 

Lesen sie die antworten

#1 Elmar Boye
08/08/2009 - 13:48 | Warnen spam
Hallo Lars,

"Lars Steinmetz" schrieb ...
ich habe eine Komponente, die ein Property besitzt, an dem ein TypeConverter bei Attribute dran hàngt. Diese wird in einem
PropertyGrid angezeigt.

"Unglültiger Eigenschaftenwert"

Details: "Das Objekt mit dem Typ 'System.String' kann nicht in den Typ 'WindowsFormsApplication1.Class1' konvertiert werden."



Damit der Forms Designer glücklich ist, sollte Dein Converter
auch einen InstanceDescriptor erzeugen können, siehe den Abschnitt
Typkonverter, die zur Laufzeit Code für die Initialisierung einer Eigenschaft generieren
http://msdn.microsoft.com/de-de/lib...bcxe5.aspx

Gruß Elmar

Ähnliche fragen