.net - System.ComponentModel.DesignerCategory ("Code") 仍然打开设计器

标签 .net vb.net winforms attributes designer

我正在尝试使用 System.ComponentModel.DesignerCategory 防止扩展标签页组件在设计器中自动打开的属性。关于其他 StackOverflow 问题的建议 1 , 2 , 3 ,好像不行。

这是组件上的代码

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

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

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

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

Component Designer

最佳答案

那个窗口是一个皮塔饼,但你没有办法阻止它出现。

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

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

关于.net - System.ComponentModel.DesignerCategory ("Code") 仍然打开设计器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16399531/

相关文章:

.net - 无效的用户输入是否是引发异常的有效原因?

c# - Mysql 连接的连接字符串

asp.net - 生产环境中无法连接到任何指定的 MySQL 主机问题

vb.net - vbc.exe 退出,代码为 -2146232797

java - 使用 Java 创建按钮快捷方式,例如使用 Windows 窗体的 &(& 符号)

c# - 如何使用表单例份验证实现对多个文件夹的重定向

c# - 如何使用 Task 对象初始化 List

c# - 英语复数/单数变换函数

.net - Windows 窗体和 ShowDialog 问题

c# - Exe 文件不是从具有数据库连接的 Windows 服务运行?