如何在 TabControl 中设置新 TabPage 页面的属性?
How to set properties of new TabPage pages at TabControl?
当新的 TabControl 放置在设计器中时,它带有两个默认的 TabPage 页面:
我可以轻松继承和修改TabControl本身,但是
如何拦截标签页的创建并设置它们的属性?
- 例如我需要
UseVisualStyleBackColor = false
默认情况下每个 TabPage.
(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
当新的 TabControl 放置在设计器中时,它带有两个默认的 TabPage 页面:
我可以轻松继承和修改TabControl本身,但是
如何拦截标签页的创建并设置它们的属性?
- 例如我需要
UseVisualStyleBackColor = false
默认情况下每个 TabPage.
(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 转到
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