我深入研究在我的 C#/.NET 解决方案中使用 Winforms 设计器(System.ComponentModel.Design 命名空间),以便我的用户可以在我正在运行的应用程序中访问表单设计器。其中大部分工作正常,但我遇到了一个非常具体的问题:我遇到了 Microsoft 控件上的一个属性,该属性仅在设计时出现,即针对该控件的设计时实例。我想抑制该属性,以便用户在将该控件的实例放置在我的程序的 Winform 设计图面实现上时无法修改它。
详细信息:当用户将控件从工具箱拖放到设计器表面时,我确保选择新添加的控件的设计器实例(以便它显示调整大小手柄,并且属性网格显示该控件的设计-时间属性)。我通过使用选择服务的GetSelectedComponents()方法并将属性网格的SelectedObjects属性分配给结果,将设计器表面上的选定对象绑定到属性网格。
我的工具箱中的许多控件都是 .NET 控件。其中之一是 .NET Winforms TableLayoutPanel控件。当您将该控件的实例放置在设计器图面上时,您将在绑定的PropertyGrid中看到Columns属性。我想禁止该属性,以便它不会出现在PropertyGrid中。
问题在于, TableLayoutPanel类型的属性列表中似乎不存在此 Columns 属性,因此,例如, usingselectedComponents[0].GetType().GetProperties()
不包含Columns属性。另外,我无法为现有的Columns属性创建新属性或覆盖它,因为它在设计时不会显示为TableLayoutPanelBrowsable(false)
控件的公开属性,因此我无法使用该属性来装饰它。
我似乎无法利用PreFilterProperties
或PostFilterProperties
因为我无法交互和自定义TableLayoutPanel 的设计器。
如何抑制TableLayoutPanel的Columns设计器属性,使其不会出现在PropertyGrid中,而无需编写自己的设计器?
波斯汪