2015-09-01 101 views
1

當新的TabControl被放置在設計,它帶有兩個默認TabPage的網頁:如何在TabControl中設置新的TabPage頁面的屬性?

enter image description here

我可以輕鬆地繼承和修改TabControl的本身,而是
我怎麼可以攔截創建標籤頁並設置其屬性?

  • 比如我在默認情況下爲每TabPage的需要UseVisualStyleBackColor = false

(C#或VB - 無論你喜歡。)

+0

@Gnqz - no。我問的是如何創建TabControl後代,它設置了一些由***任何***方式添加的頁面的默認屬性(以設計器或編程方式交互)。 – miroxlav

回答

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 
+0

謝謝@丹尼斯。我已經更新了我的答案,以進行更強大的測試 – joehanna

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

+0

也非常有幫助,謝謝。 @ joehanna是第一個關鍵的想法,所以我會授予他的答案。 – miroxlav

+0

謝謝,你說得對,當他發佈他的好答案時,我正在測試解決方案。無論如何,這將有助於他人考慮繼承:) –

+0

是的,絕對。我很感謝你的回答,+1,它很棒,代碼乾淨。 (請查看我的答案,以便最終實施。) – miroxlav

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 
+0

謝謝你,+1爲你的快速準確的答案和你的善良:) –

相關問題