System.ComponentModel.DesignerCategory(“代码”)仍然打开设计器

时间:2013-05-06 13:11:33

标签: .net vb.net winforms attributes designer

我正在尝试使用System.ComponentModel.DesignerCategory Attribtue来阻止扩展的Tab页面组件在设计器中自动打开。关于其他StackOverflow问题123的建议似乎不起作用。

以下是组件上的代码

<System.ComponentModel.DesignerCategory("Code")>
Public Class ExtendedTabPage : Inherits Windows.Forms.TabPage

这是我的.vbproj文件中的代码

<Compile Include="ExtendedTabPage.vb">
  <SubType>Component</SubType>
</Compile>

我尝试使用"""Code"初始化DesignerCategory属性,进行重建并重新打开解决方案,但是我仍然可以通过双击组件来获得下面的屏幕。我是否必须删除项目SubType?这会影响代码的编译方式吗?

Component Designer

1 个答案:

答案 0 :(得分:3)

那个窗口是皮塔饼,但是没有任何东西可以阻止它出现。

请注意原始TabPage控件如何不显示在工具箱中,它仅由TabControl的自定义设计器添加。这是通过给它[ToolboxItem(false)]属性来完成的。你的克星,[Designer]属性为TabControl和TabPage类选择自定义设计器。您必须创建自己的ExtendedTabControl并为其设计设计器。这不好玩,TabControlDesigner类是一个相当复杂的设计师。它也是内部,因此您无法从中获取。使用像Reflector或ILSpy这样的反编译器可以窥视这些设计器中的代码。我不能推荐这个,除非你有一个庞大而苛刻的付费程序员用户群。

编写代码而不是试图在设计时使这项工作是可行的。但请注意,您必须在运行时将TryCast()转换为从TabPages属性到派生类的TabPage引用。