当新的 TabControl 放置在设计器中时,它会附带两个默认的 TabPage 页面:
我可以轻松地继承和修改 TabControl 本身,但是 如何拦截标签页的创建并设置其属性?
UseVisualStyleBackColor = false
。(C#或VB - 无论你喜欢什么。)
答案 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