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

mccptt67  于 2022-11-17  发布在  其他
关注(0)|答案(3)|浏览(127)

将新的TabControl放入设计器中时,它会附带两个默认的TabPage页:

我可以轻松地继承和修改TabControl本身,但是

如何拦截选项卡页的创建并设置其属性?

  • 例如,我需要每个TabPage的默认**UseVisualStyleBackColor = false**。
  • (C#或VB -随您喜欢。)*
tpxzln5u

tpxzln5u1#

您可以行程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
uqzxnwby

uqzxnwby2#

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

感谢@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
qvtsj1bj

qvtsj1bj3#

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

相关问题