當新的TabControl被放置在設計,它帶有兩個默認TabPage的網頁:如何在TabControl中設置新的TabPage頁面的屬性?
我可以輕鬆地繼承和修改TabControl的本身,而是
我怎麼可以攔截創建標籤頁並設置其屬性?
- 比如我在默認情況下爲每TabPage的需要
UseVisualStyleBackColor = false
。
(C#或VB - 無論你喜歡。)
當新的TabControl被放置在設計,它帶有兩個默認TabPage的網頁:如何在TabControl中設置新的TabPage頁面的屬性?
我可以輕鬆地繼承和修改TabControl的本身,而是
我怎麼可以攔截創建標籤頁並設置其屬性?
UseVisualStyleBackColor = false
。(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
謝謝@丹尼斯。我已經更新了我的答案,以進行更強大的測試 – joehanna
繼承的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事件。
爲了方便他人,我分享了我最後實施的內容。
學分轉到想法的@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
謝謝你,+1爲你的快速準確的答案和你的善良:) –
@Gnqz - no。我問的是如何創建TabControl後代,它設置了一些由***任何***方式添加的頁面的默認屬性(以設計器或編程方式交互)。 – miroxlav