问题标签 [propertygrid]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - 从属性网格重置属性
我正在使用 PropertyGrid 来显示我的对象的属性。但是,我还允许用户创建自己的属性,并为这些自定义属性设置值。每个可以具有这些自定义属性的对象都有一个 Dictionary 集合,其中字符串是标识属性的唯一键,Object 是原始类型(字符串、布尔值、整数等)的值。
我用 get 和 set 方法创建了一个自定义 PropertyDescriptor,这些方法检查 Dictionary 是否有匹配的键,或者分别用匹配的键创建/覆盖值。
但是,我还想让用户能够清除该属性,从而将其条目从字典中完全删除。我将代码放在我的自定义 PropertyDescriptor 的 ResetValue 覆盖方法中,但是我看不到任何通过 PropertyGrid 接口调用它的方法?它似乎不是上下文菜单选项或类似的东西。
因此,如果我有一个带有自定义 ResetValue 方法的自定义 PropertyDescriptor,我如何真正从 PropertyGrid 调用该方法?
c# - PropertyGrid 中的斜体文本
我正在使用 PropertyGrid 来显示通过 ICustomTypeDescriptor 的实现公开的自定义属性。
我的对象设置在树结构中,每个属性的值要么在每个对象中设置,要么从父对象继承。在 PropertyGrid 中,我想直观地向用户展示在所选对象中设置了哪些属性值,以及哪些属性值是从父对象继承的。
现在,我将每个属性都显示为两个类别。一组显示在实际对象中设置的值,如果未设置,则带有空白字段。另一组显示分配给对象的属性值,这些属性值要么在对象中设置,要么在对象中未设置时继承。
我想将这两组组合成一个购买,以常规文本显示设置属性,并以斜体文本显示继承值。但是,似乎没有任何方法可以通过 ICustomTypeDescriptor.GetProperties() 做到这一点。而且我无法轻松访问 PropertyGrid 的属性,因为它们是在程序运行时创建的。
c# - 在运行时创建/修改枚举
我正在创建一个程序,用户可以选择创建自己的自定义属性,这些属性最终将显示在PropertyGrid
. 现在我不想弄乱自定义编辑器,所以我只允许已经内置编辑器的原始类型属性( string
, int
, double
,DateTime
等bool
) 。PropertyGrid
但是,我还想为用户提供创建多项选择属性的选项,他们可以在其中定义可能值的列表,这些值又将显示为PropertyGrid
.
当我Enum
在代码中硬编码 an 时,属性网格会自动将其属性显示enum
为下拉列表。但是我可以在运行时创建和/或修改枚举,以便用户可以添加另一个属性选项,然后返回PropertyGrid
并在下拉列表中查看他们的新选项?
更新
考虑到帕特里克的评论,我认为Enum
s 在这种情况下不是正确的方法。那么,如何使用字符串列表来填充PropertyGrid
项目中的下拉列表呢?那需要自定义编辑器吗?
c# - ICustomTypeDescriptor、TypeDescriptionProvider、TypeConverter 和 UITypeEditor
我试图全面了解您如何使用 ICustomTypeDescriptor、TypeDescriptionProvider、TypeConverter 和 UITypeEditor 来更改 PropertyGrid 显示和与对象交互的方式。
有人可以告诉我这是否正确,或者我是否遗漏了任何主要概念或要点?我真的只是想了解您为什么以及何时使用每个课程。
ICustomTypeDescriptor
- 在类中实现此接口完全覆盖类的本机属性,并用 ICustomTypeDescriptor.GetProperties() 返回的 PropertyDescriptors 替换它们
类型描述提供者
- 用于扩展类的现有属性
- TypeDescriptionProvider 通过 TypeDescriptionProvider 属性附加到类
- TypeDescriptionProvider 的 GetTypeDescriptor() 方法返回要附加到该类型的现有属性的 ICustomTypeDescriptor。
- PropertyGrid 将显示通过反射找到的类的属性,以及通过 TypeDescriptionProvider 添加到类的属性
类型转换器
- 在类型之间转换
- 就使用用于在属性网格中显示/编辑的复杂类型和原始类型之间转换的 PropetyGrid 而言。
- TypeConverter 的 GetStandard values 方法也可用于在 propertygrid 中显示可能值的列表
UITypeEditor
- 定义用于操作复杂类型属性的自定义编辑器。
- 通过属性与属性相关联。
因此 ICustomTypeDescriptor 一个 TypeDescription 提供程序用于添加/更改/替换对象的整个属性。TypeConverter 和 UITypeEditor 应用于单个属性并控制这些特定属性的交互方式。
c# - 事件未显示在属性网格中
我正在创建一个特殊的搜索文本框。除其他外,它有以下两个事件:
事情是只有底部的两个显示在设计视图属性事件浏览器中(不管它的名字是什么......)。我想知道为什么。是因为我没有使用标准EventArgs
吗?但这不应该是这种情况,因为我的意思是,还有其他事件没有使用它......比如按键相关事件等......
该类GenericEventArgs<T>
如下所示:
我在这里做错了什么?
c# - 具有 StandardValuesSupported 和自动完成功能的 StringConverter
我想开发一个具有标准值的 StringConverter,在将其附加到 PropertyGrid 之后,它的作用就像带有自动完成功能的组合框。下面的示例将给我一个组合框,但没有自动完成功能 - 用户必须展开它并手动选择其中一项。有没有办法让用户输入其中一个选项的开头,所以组合框会自动选择匹配的选项?
GetStandardValues 返回的列表必须是动态的,所以我不能在那里使用任何枚举。我从上面的例子:http: //www.codeproject.com/KB/cpp/dropdownproperties.aspx
.net - 如何在 PropertyGrid 上自定义类别排序?
如何自定义 a 中的类别排序PropertyGrid
?
如果我设置以下任一...
...然后类别将按字母顺序排列。(“按字母顺序”似乎适用于每个类别中的属性。)如果我使用PropertySort.NoSort
,我会失去分类。
我用 填充我PropertyGrid
的SelectObject
,这很容易:
options
是具有适当修饰属性的类的实例:
我在六个类别中有几十个属性。
有什么方法可以调整类别排序顺序,同时保持我的易用性SelectedObject
?
c# - 如何为闭源类型的所有属性注入自定义 UITypeEditor?
我想避免在我为其编写自定义 UITypeEditor 的特定类型的每个实例上放置 EditorAttribute。
我无法在类型上放置 EditorAttribute,因为我无法修改源。
我引用了将要使用的唯一 PropertyGrid 实例。
我可以告诉 PropertyGrid 实例(或所有实例)在遇到特定类型时使用自定义 UITypeEditor 吗?
这是一篇 MSDN 文章,提供了如何在 .NET 2.0 或更高版本中执行此操作的起点。
.net - 动态枚举.Net中属性的值
您知道 TreeView 控件的 ImageList 属性如何列出窗体上的所有 ImageList 吗?我需要类似的东西,但有一个字符串列表。它类似于枚举,但在运行时定义,对象在 PropertyGrid 中公开属性。
因此,对于像 { "foo", "bar", "grill" } 这样的字符串列表,该属性应该列出这些,但是如果该字符串列表被更改(例如,添加一个“bbq”项),该属性应该枚举 { "foo", "bar", "grill", "bbq" } 代替。
c# - C# PropertyGrid 拖放
我正在尝试使用 VS2005 (.NET 2.0) 在 C# 中实现对属性网格的拖放支持。propertygrid 可以处理 dragenter 等事件,但似乎没有办法在拖动事件期间获取指针下的 griditem。到目前为止,我能得到的最好的方法是使用 selectedgriditem 属性来检索自定义属性描述符并设置值,但这需要在开始拖放操作之前已经选择了一个网格项。
有没有人有任何运气来实施这个?
谢谢 :-)