【发布时间】:2015-11-07 12:15:06
【问题描述】:
PropertyGrid 有点麻烦。
我已将所选对象设置为包含各种属性的类,其中 90% 可以正常工作,但对于属性为 List(Of String) 的任何地方,它似乎都不会调用属性的 Set 部分。
我的课如下(缩短版):
Public Class VideosProperties
Public Property EpisodeColorOdd As Color
Get
Return Videos_EpisodeColorOdd
End Get
Set(value As Color)
Videos_EpisodeColorOdd = value
End Set
End Property
<Editor("System.Windows.Forms.Design.StringCollectionEditor, System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a",
"System.Drawing.Design.UITypeEditor,System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")>
Public Property Extensions As List(Of String)
Get
Return Videos_Extensions
End Get
Set(value As List(Of String))
Videos_Extensions = value
End Set
End Property
End Class
我已使用以下代码将SelectedObject 设置为此类:
Dim _Properties As Object
_Properties = New VideosProperties
PropertyGrid1.SelectedObject = _Properties
我已使用以下代码初始化列表:
Extensions = New List(Of String)
当我运行我的代码时,PropertyGrid 会显示 EpisodeColorOdd 属性,这可以正常工作,但 Extensions 属性不能。
当您使用PropertyGrid 编辑扩展属性时,它不会调用属性的Set(value as List(Of String)) 部分。
我环顾四周,似乎找不到解决方案(我可能还不够努力)。
谁能帮忙?
编辑
Plutonix - 您的代码不起作用。我已经复制并粘贴到一个新项目中,但出现错误。
我收到一个错误
<Editor("System.Windows.Forms...etc")>
告诉我“类型 'Editor' 未定义”,所以我导入了“System.ComponentModel”,现在得到 错误提示“重载解析失败,因为没有可访问的‘新’接受此数量的参数。”在同一点。
如果我删除了那个部分,它就不能正常工作。
我运行代码,打开表单,单击 Foods 属性并打开一个编辑器,单击添加并收到错误“未找到类型 'System.String' 的构造函数”。我以前吃过的, 我用
修复了<Editor("System.Windows.Forms.Design.StringCollectionEditor, System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", "System.Drawing.Design.UITypeEditor,System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")>
而不是
<Editor("System.Windows.Forms...etc")>
现在,当我单击该属性时,它会打开一个不同的编辑器,并且实际上并没有访问该属性的 Set 部分。所以,我又回到了原点。
【问题讨论】:
-
a)
"...etc"显然是长编辑器名称的简写,抱歉。 b) 没有关于何时何地实例化扩展列表的上下文。 c)doesn't actually access the Set part of the property它永远不会也不应该。重新阅读答案。集合编辑器编辑集合中的项目,不是集合对象 -
我想我可能误解了你的帖子。我刚刚检查过,它会更新代码的
Get部分中的列表。这是一个问题的原因是因为在所有其他属性的Set部分,我正在调用一些代码来更新我的注册表。由于它没有使用Set,它没有更新,它基本上没有保存我的设置。我现在已经将此代码添加到Get区域并且它工作正常。感谢您的帮助,Plutonix,非常感谢。 :-) -
This link 解释了集合编辑器的工作原理。如果您必须限定/处理每个项目,请使用生成事件的列表或编写集合类。当编辑器调用
.Add或.AddRange方法时,您可以让代码验证项目或其他任何内容。
标签: .net vb.net properties propertygrid