gpt4 book ai didi

c# - 如何将参数传递给继承 UITypeEditor 的类

转载 作者:行者123 更新时间:2023-11-30 13:40:38 33 4
gpt4 key购买 nike

我为一个属性创建了一个编辑器。但是,我想将一些参数传递给编辑器的构造函数,但我不确定如何执行此操作。

FOO _foo = new foo();
[Editor(typeof(MyEditor), typeof(UITypeEditor))]
public object foo
{
get { return _foo; }
set {_foo = value;}
}

~

class MyEditor: UITypeEditor
{
public override object EditValue(System.ComponentModel.ITypeDescriptorContext context, System.IServiceProvider provider, object value)
{
//some other code
return obj;
}
}

最佳答案

我知道这是个老问题,但我遇到过类似的问题,唯一提供的答案并没有解决它。

所以我决定编写自己的解决方案,这有点棘手,更像是一种变通方法,但它确实对我有用,也许会对其他人有所帮助。

这是它的工作原理。由于您不创建自己的 UITypeEditor 派生实例,因此您无法控制传递给构造函数的参数。您可以做的是创建另一个属性并将其分配给同一属性,您正在分配自己的 UITypeEditor 并将参数传递给该属性,然后从该属性读取值。

[Editor(typeof(MyEditor), typeof(UITypeEditor))]
[MyEditor.Arguments("Argument 1 value", "Argument 2 value")]
public object Foo { get; set; }

class MyEditor : UITypeEditor
{
public override object EditValue(System.ComponentModel.ITypeDescriptorContext context, System.IServiceProvider provider, object value)
{
string property1 = string.Empty, property2 = string.Empty;
//Get attributes with your arguments. There should be one such attribute.
var propertyAttributes = context.PropertyDescriptor.Attributes.OfType<ArgumentsAttribute>();
if (propertyAttributes.Count() > 0)
{
var argumentsAttribute = propertyAttributes.First();
property1 = argumentsAttribute.Property1;
property2 = argumentsAttribute.Property2;
}
//Do something with your properties...
return obj;
}

public class ArgumentsAttribute : Attribute
{
public string Property1 { get; private set; }
public string Property2 { get; private set; }
public ArgumentsAttribute(string prop1, string prop2)
{
Property1 = prop1;
Property2 = prop2;
}
}
}

关于c# - 如何将参数传递给继承 UITypeEditor 的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7456738/

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