如何在PropertyGrid中自定义绘制GridItem?

2024-05-26

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

如果将属性声明为 Color 类型,则其值将使用字符串描述旁边的颜色样本来绘制。如果属性是图像类型,则在字符串描述旁边绘制图像的缩略图。

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


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

Exapmle

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);
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在PropertyGrid中自定义绘制GridItem? 的相关文章

随机推荐

  • valgrind 是如何工作的?

    有人可以快速解释 Valgrind 的工作原理吗 举个例子 它如何知道内存何时被分配和释放 Valgrind 基本上在 沙箱 中运行您的应用程序 在此沙箱中运行时 它能够插入自己的指令来进行高级调试和分析 从手册中 然后 您的程序将在 Va
  • 使用 scipy.io 将 python pandas dataframe 转换为 matlab 结构

    我正在尝试使用 scipy io 将 pandas 数据帧保存到 matlab mat 文件 我有以下内容 array1 np array 1 2 3 array2 np array a b c array3 np array 1 01 2
  • “UITableView”类型的值没有成员“sectionHeaderTopPadding”

    为什么我在 Xcode 12 4 模拟器 ios 14 x 中收到以下代码的构建错误 if available iOS 15 0 myTableView sectionHeaderTopPadding 0 0 error here 错误是
  • 如何将内容放在article.js之上/之上

    So I am trying to create a navigation and footer in the body of the website but the particle js keeps coming over those
  • 使用 Objective-C 将 XMP 数据嵌入到 PNG

    我需要将自定义 XMP 文件嵌入到 iOS 应用程序中的 PNG 中 到目前为止 我能做的就是编译 Adob e XMP 工具包 生成 Xcode 项目 然后正确编译该项目 从那里我不知道如何在我的 Xcode 项目中使用该库以及如何使用它
  • Xuggler 未转换 .webm 文件?

    我只是尝试使用 Xuggler 将 mov 文件转换为 webm 这应该可以工作 因为 FFMPEG 支持 webm 文件 这是我的代码 IMediaReader reader ToolFactory makeReader home use
  • Apache mod_rewrite:仅当不在本地主机中时才强制 www

    我的 htaccess 中有以下内容来强制 URL 中包含 www RewriteCond HTTP HOST www RewriteRule http www HTTP HOST 1 R 301 L 如果不在本地主机上 我该如何应用它 我
  • 如何使 VS Code 建议片段位于建议列表的顶部?

    我想在 VS Code 中使用代码片段 但是当我输入时 例如 for在 javascript 文件中 IntelliSense 不建议片段 for loop 我需要手动滚动下拉列表并选择它 有没有办法让 VS Code 首先建议片段 UPD
  • 如何提高Canvas渲染性能?

    我必须画很多Shape http msdn microsoft com en us library system windows shapes shape aspx 约 1 20 万 作为 Canvas 2 的子级 我在 WPF 应用程序中
  • 在 Grails 中使用 Spring-Security 前/后注释

    我正在使用 Grails Spring Security 插件 Spring Security Core 1 0 1 它又使用 spring security 3 0 2 RELEASE 开发 Grails 版本 1 3 3 Web 应用程
  • C# 的 user32 和内核方法列表 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 有没有一个很好的清单来说明我们可以从中进口什么user32 dll and kernel dll并在 C 中使用 我是 Windows A
  • Cassandra cqlsh - 如何显示时间戳列的微秒/毫秒?

    我正在插入带有时间戳列的 Cassandra 表 我的数据具有微秒精度 因此时间数据字符串如下所示 2015 02 16T18 00 03 234 00 00 但是 在 cqlsh 中 当我运行选择查询时 微秒数据不会显示 我只能看到精确到
  • JavaFX颜色选择器的语言

    有没有办法改变语言ColorPicker的文本 例如 自定义颜色 当前颜色 新颜色 色相 饱和度 亮度 不透明度 保存 使用 取消 编辑 以下答案适合那些需要更多内容的人exotic语言 如果您使用其中之一 de es fr it ja k
  • 是否可以在 proc 中查看 ruby​​ 代码?

    p Proc new puts ok 是否可以在过程中看到 ruby 代码 inspect返回内存位置 puts p inspect
  • cmake 包括其他目录中的 h 文件

    我在 cmake 项目下进行测试时遇到问题 我的项目是这样安排的 TerrainMap PointAccumulator heightQuadGrid Test 在 TerrainMap 目录中 CMakeLists txt 文件简单地概述
  • 捆绑 pathsForResourcesOfType:inDirectory:

    在我的应用程序中 我有很多图片 分为几个类别 以下是项目内和我的硬盘上的应用程序树 ApplicationName Resources Thumbs Images Buttons Default png 在拇指文件夹中 我有很多 png 文
  • Azure 表存储分区键

    两个有些相关的问题 1 是否有办法获取表实体所在服务器的ID 2 使用 GUID 能否为我提供最佳的分区键分布 如果没有 那又会怎样呢 几周来我们一直在为表存储性能而苦苦挣扎 简而言之 这确实很糟糕 但我们很早就意识到使用随机分区键会将实体
  • 添加鼠标事件到svg ,检测网格悬停

    我有一个有点复杂的问题 我正在尝试通过 svg 渲染网格 然后将事件侦听器添加到网格中 目前我正在通过渲染网格
  • Smarty 3 如何与 Zend Framework 2 一起使用?

    我很久以前就使用过 PHP5 目前正在尝试刷新我的知识 并通过 Zend Framework 2 和 Smarty 3 的知识来增强它 以实现一个可能的项目 我目前正在尝试弄清楚如何使用 Smarty 3 作为 Zend Framework
  • 如何在PropertyGrid中自定义绘制GridItem?

    我想以与所有者在 ListView 详细信息 和其他控件中绘制项目类似的方式在 PropertyGrid 中绘制属性值 如果将属性声明为 Color 类型 则其值将使用字符串描述旁边的颜色样本来绘制 如果属性是图像类型 则在字符串描述旁边绘