gpt4 book ai didi

c# - 无法在设计时编辑 Point[] 或 List

转载 作者:太空狗 更新时间:2023-10-30 01:15:22 26 4
gpt4 key购买 nike

我正在创建自定义控件,它将从点列表(或数组)中绘制形状。我已经完成了基本的绘图功能,但现在我正在为 Visual Studio 中的设计时支持而苦苦挣扎。

我创建了两个属性:

private Point _point;
public Point Point
{
get { return _point; }
set { _point = value; }
}

private Point[] _points;
public Point[] Points
{
get { return _points; }
set { _points = value; }
}

如下面的屏幕所示,Point 是可编辑的,但 Points 的编辑器不工作。对于每个属性,我都收到错误 Object does not match target type.

enter image description here

如果我将 Point 更改为 MyPoint(具有 X、Y 属性的自定义类)编辑器工作正常,但我不想创建不需要的额外类,因为编辑器在应该工作的时候却没有工作。

我的问题是:我可以使用数组或点列表作为公共(public)属性并为其提供设计时支持吗?

最佳答案

您可以创建自定义集合编辑器派生 CollectionEditor并设置 typeof(List<Point>)作为集合类型,还注册一个新的 TypeConverterAttribute对于 Point :

// Add reference to System.Design
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.ComponentModel.Design;

public class MyPointCollectionEditor : CollectionEditor
{
public MyPointCollectionEditor() : base(typeof(List<Point>)) { }
public override object EditValue(ITypeDescriptorContext context,
IServiceProvider provider, object value)
{
TypeDescriptor.AddAttributes(typeof(Point),
new Attribute[] { new TypeConverterAttribute() });
var result = base.EditValue(context, provider, value);
TypeDescriptor.AddAttributes(typeof(Point),
new Attribute[] { new TypeConverterAttribute(typeof(PointConverter)) });
return result;
}
}

然后将其注册为您的 List<Point> 的编辑器就足够了:

using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Drawing.Design;

public class MyClass : Component
{
public MyClass() { Points = new List<Point>(); }

[Editor(typeof(MyPointCollectionEditor), typeof(UITypeEditor))]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public List<Point> Points { get; private set; }
}

关于c# - 无法在设计时编辑 Point[] 或 List<Point>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38561197/

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