如何在 TabControl 中设置新 TabPage 页面的属性?

How to set properties of new TabPage pages at TabControl?

当新的 TabControl 放置在设计器中时,它带有两个默认的 TabPage 页面:

我可以轻松继承和修改TabControl本身,但是
如何拦截标签页的创建并设置它们的属性?

(C# 或 VB – 任何你喜欢的。)

您可以处理 ControlAdded 事件并测试添加的控件并相应地处理它:

  Private Sub TabControl1_ControlAdded(sender As Object, e As ControlEventArgs) Handles TabControl1.ControlAdded
    Debug.WriteLine("Something added: " & e.Control.Name & " " & e.Control.GetType().ToString)

   If TypeOf e.Control Is TabPage Then
      Dim tp As TabPage = CType(e.Control, TabPage)
      tp.UseVisualStyleBackColor = False
    End If
  End Sub

继承 TabControl 并覆盖 OnControlAdded 方法。

class MyTabControl : TabControl
{
    protected override void OnControlAdded(ControlEventArgs e)
    {
        base.OnControlAdded(e);

        var page = e.Control as TabPage;
        if (page != null)
        {
            page.UseVisualStyleBackColor = false;
            page.BackColor = Color.Red;

        }
    }
}

这样,如果您使用代码或使用设计器添加 TabPage,您的设置将会应用。

在这种情况下,继承比事件处理更有效,因为不需要在项目中的每个表单上处理 ControlAdded 事件。

为了方便其他人,我分享了我最终实现的内容。

Credits 转到 for idea and 以获得干净的代码。所以我的解决方案是基于他们的贡献:

Public Class TabBasedMultipage : Inherits TabControl

    Protected Overrides Sub OnControlAdded(e As ControlEventArgs)

        MyBase.OnControlAdded(e)

        Dim tabPage As TabPage = TryCast(e.Control, TabPage)
        If tabPage IsNot Nothing Then
            tabPage.UseVisualStyleBackColor = False
        End If

    End Sub

End Class