【发布时间】:2011-09-28 18:50:00
【问题描述】:
我正在尝试使用 WinForms PropertyGrid 控件的可自定义属性选项卡功能,但我被打败了。我特别尝试在运行时使用 PropertyGrid 来显示对象属性,而不是尝试为控件创建设计时支持,尽管它们似乎是类似技术的应用程序。
这个问题让我很困惑。我已尝试关注有关该主题的几个教程,但没有一个得出任何真正可靠的结论。
文学评论
http://msdn.microsoft.com/en-us/library/aa302334.aspx#vsnetpropbrow_topic05
本文告诉读者,添加属性选项卡很容易实现,并且代码示例包含在包含的 FunkyButton 项目中,没有包含在任何地方。
http://www.codeproject.com/KB/grid/PropertyGridExWinForms.aspx
该项目建议使用自定义属性选项卡的唯一方法是通过覆盖例如 GetService() 私有方法来扩展基本属性网格功能。我很确定这不是必需的,并试图使用它的信息来创建服务提供者。然而,它确实启发了我,属性网格中的 SelectedObject 类需要将类属性 PropertyTabAttribute 分配给我创建和使用的扩展 System.Windows.Forms.PropertyGridInternal.PropertiesTab。
http://www.dacris.com/blog/2008/01/02/net-how-to-show-events-tab-in-a-property-grid/
本文指出属性网格本身需要使用 PropertyGrid.PropertyTabs.AddTabType() 方法添加选项卡。然后它显示需要分配属性网格的 Site 属性,然后沾沾自喜地建议我应该已经知道如何执行此操作:“...您需要将网格的 Site 属性设置为您已经使用的某个设计器站点已实现。如果您托管自己的设计师,您应该知道如何检索它。”
http://www.syncfusion.com/FAQ/windowsforms/faq_c83c.aspx#q913q
在开始写这个问题时,我找到了这篇关于该主题的简短文章的链接,其中包含代码。这个项目似乎更专注于设计时功能,但是当我在完全普通的 PropertyGrid 中使用他们的对象实例时,它同时显示了 Properties 选项卡按钮和它们的 Custom Tab 对象。我能够毫不费力地在相关视图之间切换。然而,该项目似乎建议现在需要自定义属性来区分可用视图之间的属性。这篇文章现在建议我忽略站点定义、专门的 PropertyGrids 和服务提供者,而专注于显示的对象本身。
令人沮丧的是,在修改这个项目以更贴切地反映我的应用程序时,我将操作属性网格移动到选项卡控件的选项卡页,其中破坏了属性网格显示默认属性选项卡的能力,因此意味着我可以切换到自定义属性选项卡,但从不返回。
结论
我完全不知所措。我必须很接近,但在我尝试完成这项工作的所有途径中,也许我的大脑只是被炒了。使属性选项卡起作用的关键是什么? 是吗:
- PropertyGrid.SelectedObject 的具体类定义?
- 属性网格本身的设置?
- 关于自定义选项卡定义的全部内容?
最后描述的项目是否因为 SelectedObject 继承自 UserControl 而起作用? SelectedObject 是否需要继承自 System.ComponentModel.Component?
如果有人可以尝试清除这一切并提供最简洁的说明来说明如何使其工作,我将不胜感激。
非常感谢。
【问题讨论】:
-
附加信息,最后一个引用的项目似乎工作,因为 SelectedObject 是一个 Windows.Forms.Control 并且它被添加到窗体的 Corm.Controls.ControlCollection 上形式。它在显示“属性”选项卡方面的变化无常,这与它和选项卡控件被添加到构造函数中的 ControlCollection 的顺序有关。如果在表单的 InitializeComponents() 方法中的选项卡控件之后添加它,则它可以工作。
标签: .net propertygrid custom-attributes