【问题标题】:How to custom draw a GridItem in PropertyGrid?如何在 PropertyGrid 中自定义绘制 GridItem?
【发布时间】:2021-01-21 01:38:01
【问题描述】:

我想在我的 PropertyGrid 中以与在 ListView(详细信息)和其他控件中绘制所有者绘图项类似的方式绘制属性值。

如果一个属性被声明为颜色类型,它的值是在字符串描述旁边用一个颜色样本绘制的。如果属性是一种图像,则在字符串描述旁边绘制图像的缩略图。

我有一个属性,它是一个包含三个颜色类型属性的类。我想在属性名称旁边的 PropertyGrid 中绘制所有三种颜色。该类有一个 ExpandableObjectConverter 作为 TypeConverter,在其中编辑颜色,但我所知道的更改属性值显示方式的唯一选项是使用 TypeConverter 返回一个字符串。

【问题讨论】:

标签: c# .net winforms propertygrid


【解决方案1】:

您需要通过从UITypeEditor 派生并覆盖其GetPaintValueSupportedPaintValue 来为您的类型(具有3 个颜色属性)创建一个编辑器。比使用Editor 属性为您的班级注册编辑器:

示例

using System.ComponentModel;
using System.Drawing;
using System.Drawing.Design;
public class MyComponent : Component
{
    public SampleClass SampleProperty { get; set; } = new SampleClass();
}
[TypeConverter(typeof(ExpandableObjectConverter))]
[Editor(typeof(SampleClassEditor), typeof(UITypeEditor))]
public class SampleClass
{
    public Color Color1 { get; set; } = Color.Red;
    public Color Color2 { get; set; } = Color.Green;
    public Color Color3 { get; set; } = Color.Blue;
}
public class SampleClassEditor : UITypeEditor
{
    public override bool GetPaintValueSupported(ITypeDescriptorContext context)
    {
        return true;
    }
    public override void PaintValue(PaintValueEventArgs e)
    {
        var sample = e.Value as SampleClass;
        if (sample != null)
        {
            int x = e.Bounds.X, y = e.Bounds.Y;
            int w = e.Bounds.Width, h = e.Bounds.Height;
            using (var b = new SolidBrush(sample.Color1))
                e.Graphics.FillRectangle(b, x, y, w / 3, h);
            using (var b = new SolidBrush(sample.Color2))
                e.Graphics.FillRectangle(b, x += w / 3, y, w / 3, h);
            using (var b = new SolidBrush(sample.Color3))
                e.Graphics.FillRectangle(b, x += w / 3, y, w / 3 + 1, h);
        }
        base.PaintValue(e);
    }
}

【讨论】:

  • smacking head 我在每个错误的地方寻找支持 Paint 的事件或基类。我经常使用 UITypeEditor,但在可覆盖的方法中看不到“Paint”。多么尴尬。谢谢你!您的样本非常好,它肯定也会对其他人有所帮助。
  • 没问题,不是那么明显,直到你学会它:)
  • 顺便说一句,你可能想拍tour :)
猜你喜欢
  • 2023-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-30
  • 1970-01-01
  • 2011-11-13
相关资源
最近更新 更多