gpt4 book ai didi

c# - propertygrid 中的 TypeConverter 只能从字符串转换,不能转换为

转载 作者:太空狗 更新时间:2023-10-29 23:19:19 42 4
gpt4 key购买 nike

在访问属性网格时,只有 ConvertTo 方法被调用(很多次)。这正确地返回了“Foo!”属性网格中的字符串。当我单击编辑时出现异常 Cannot convert object of type Foo to type System.String.(不完全是翻译)。 ConvertFrom 方法没有被调用,任何线索为什么?错误表明它正在尝试转换为字符串,而不是来自。

我想当我想编辑这个对象时,它必须从 Foo 转换为字符串,并在完成编辑后返回。

字符串转换器类:

public class FooTypeConverter : StringConverter {
public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value) {
return new Foo((string) value);
}

public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType) {
return "Foo!";
}

public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType) {
return true;
}

public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType) {
return true;
}
}

正在访问的属性:

Foo _foo = new Foo();
[Editor(typeof(System.ComponentModel.Design.MultilineStringEditor), typeof(UITypeEditor))]
[TypeConverter(typeof(FooTypeConverter))]
public Foo Foo {
get {
return _foo;
}
set {
_foo = value;
}
}

最佳答案

回复您的更新;这里有一个 FooEditor 应该可以作为 shim:

class FooEditor : UITypeEditor
{
MultilineStringEditor ed = new MultilineStringEditor();
public override object EditValue(ITypeDescriptorContext context, IServiceProvider provider, object value)
{
Foo foo = value as Foo;
if (foo != null)
{
value = new Foo((string)ed.EditValue(provider, foo.Value));
}
return value;
}
public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context)
{
return ed.GetEditStyle();
}
public override bool IsDropDownResizable {
get { return ed.IsDropDownResizable; }
}
}

你显然需要关联它:

[TypeConverter(typeof(FooTypeConverter))]
[Editor(typeof(FooEditor), typeof(UITypeEditor))]
class Foo { /* ... */ }

关于c# - propertygrid 中的 TypeConverter 只能从字符串转换,不能转换为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2116920/

42 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com