【问题标题】:How to prevent the TabControl from creating tab pages upon initializing VS 2017如何防止 TabControl 在初始化 VS 2017 时创建标签页
【发布时间】:2018-10-15 22:43:34
【问题描述】:

我正在创建一个从 TabControl 继承的工具。它的功能类似于 TabControl,但增加了一些功能。但是,每次我将 TabControl 或我的工具拖到表单上时,都会立即创建 2 个 TabPage。我不希望在设计器中创建这两个标签页,如何防止创建这两个标签页?

【问题讨论】:

  • 创建了2个标签页?除非您在某处弄乱了控件,否则这是不可能的
  • 这就是所谓的bug。您在某处有代码正在创建 2。阅读How to Ask 并获取tour,然后调试您的代码。
  • 嗯,好问题。这些页面不是在您的子类中创建的,而是在您将其添加到的表单中创建的,并且它发生在 form_designer.cs 中。就在我们不应该乱来的地方……!如果足够好,您可以随时在表单的构造函数中添加ccTab1.TabPages.Clear();..
  • 是 TabControl 的设计器执行此操作,这就是为什么您使用的每个 TabControl 都以两页开始的原因。从 TabControl 派生一个类会继承设计器。不幸的是 TabControlDesigner 类是内部的,所以覆盖它的行为不是一个选项,你不能没有它。下一步要去哪里并不明显。
  • @Pluto 不正确(并且值得一票赞成而不是反对票,imo)

标签: c# tabcontrol tabpage


【解决方案1】:

这是个好问题;不幸的是,似乎没有好的答案。

默认情况下会为任何TabControl 创建这两个页面,而不仅仅是您的子类。

它不在您的代码中,也不在MSDN sources 中。

根据 Hans 的评论,我假设表单(或顶级控件类,例如 UserControl)使用“设计器模板”在表单的 InitializeComponent 代码中添加额外的初始化代码。我们不应该乱用这段代码!

在这里,在Form1.Designer.cs 代码中,标签页被创建,带有它们愚蠢的名字,作为类范围的控件并添加到标签中。

最简单的解决方案是手动删除设计器中的页面。

我能想到的唯一其他解决方法是清除页面,例如在表单的构造函数中:

public Form1()
{
    InitializeComponent();
    customTab1.TabPages.Clear();
}

注意:默认TabPages在您在代码中创建和添加TabControl不会添加

【讨论】:

  • 谢谢。当我在 Visual Studio 的设计器中放置一个选项卡控件时,听到我无法阻止这两个选项卡停止创建,这令人非常沮丧。
  • 是的,很奇怪。请注意,在代码中添加选项卡时不会创建它们!
猜你喜欢
  • 2014-03-02
  • 1970-01-01
  • 2013-05-19
  • 2015-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多