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

时间:2015-09-01 08:30:32

标签: c# .net vb.net winforms tabcontrol

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

enter image description here

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

  • 例如,默认情况下,每个 TabPage 都需要 UseVisualStyleBackColor = false

(C#或VB - 无论你喜欢什么。)

3 个答案:

答案 0 :(得分:4)

您可以处理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

答案 1 :(得分:1)

继承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事件。

答案 2 :(得分:1)

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

积分转到@joehanna获取提示,然后转到@Reza Aghaei获取干净代码。所以我的解决方案基于他们的贡献:

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