当所选对象是数组时,有没有办法更改PropertyGrid控件中显示的文本(“Item_Type [] Array”)?
我喜欢网格如何显示层次结构中的每个Item,但我认为如果我可以更改或删除“Item_Type [] Array”文本会更好。
答案 0 :(得分:2)
您可以使用自定义转换器实现此目的:
public class Test
{
[TypeConverter(typeof(ConverterArray))]
public string[] Property { get; set; } = new[] { "1", "2", "3" };
}
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
propertyGrid1.SelectedObject = new Test();
}
}
public class ConverterArray : TypeConverter
{
public override object ConvertTo(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value, Type destType)
{
if (destType == typeof(string))
return "An array kk?";
return base.ConvertTo(context, culture, value, destType);
}
}
没有转换器的屏幕截图,并带有:
以可扩展列表(以索引作为名称)查看和编辑项目从ArrayConverter
继承转换器。
如果你需要删除/添加项目,你必须实现自定义编辑器(通常你会使用另一个表单并使用模态编辑器UITypeEditorEditStyle.Modal
):
public class EditorHeaterPID : UITypeEditor
{
public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context) => UITypeEditorEditStyle.Modal;
public override object EditValue(ITypeDescriptorContext context, IServiceProvider provider, object value)
{
SomeForm form = new SomeForm(value);
if (form.ShowDialog() == DialogResult.OK)
return form.Items;
return value;
}
}