2

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

这是组件上的代码

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

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

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

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

组件设计器

4

1 回答 1

3

该窗口是一个皮塔饼,但您无法阻止它出现。

请注意原始 TabPage 控件如何没有显示在工具箱中,它只是由 TabControl 的自定义设计器添加的。这是通过赋予它 [ToolboxItem(false)] 属性来完成的。而你的克星,[Designer] 属性为 TabControl 和 TabPage 类选择自定义设计器。您必须创建自己的 ExtendedTabControl 并为其设计一个设计器。这不好玩,TabControlDesigner 类是一个相当精细的设计器。它也是内部的,因此您无法从中派生。使用像 Reflector 或 ILSpy 这样的反编译器是在这些设计器中查看代码的一种方式。除非您拥有庞大且要求苛刻的挑剔付费程序员用户群,否则我不能推荐这个。

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

于 2013-05-06T13:59:12.637 回答