2015-09-01 2 views
1

Когда новый TabControl помещается в дизайнере, он поставляется с двумя умолчанию TabPage страницы:Как установить свойства новых страниц TabPage в TabControl?

enter image description here

Я легко могу унаследовать и изменить TabControl сам, но
как я могу перехватить создание вкладок и задание их свойств?

  • Например мне нужно UseVisualStyleBackColor = false по умолчанию для каждого TabPage.

(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

Спасибо @Dennis. Я обновил свой ответ для более надежного теста – 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 с использованием кода или используя конструктор, ваши настройки будут применены.

В этом случае Inheritance лучше работает с обработкой событий, потому что нет необходимости обрабатывать событие 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 за ваш быстрый и точный ответ и вашу доброту :) –

Смежные вопросы