Click here to Skip to main content
15,891,529 members
Articles / Desktop Programming / Win32

KRBTabControl

Rate me:
Please Sign up or sign in to vote.
4.92/5 (61 votes)
2 Aug 2011CPOL20 min read 235.1K   16.4K   156  
This article explains how to make a custom Windows Tab Control in C#.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using KRBColorTable;

namespace KRBTabControlTest
{
    public partial class Main : Form
    {
        #region Instance Members

        private ToolStripRenderer m_currentToolStripRenderer;
        private KRBProfessionalColors m_currentProfessionalColorTable;

        #endregion

        #region Constructor

        public Main()
        {
            InitializeComponent();

            this.RenderStyles.Items.Add(typeof(ToolStripProfessionalRenderer)); //Standart tipimizi başlangıçta atıyoruz

            System.Reflection.Assembly assembly = System.Reflection.Assembly.LoadFrom("ColorSnapIn.dll");
            Type[] types = assembly.GetTypes();

            foreach (Type type in types)
            {
                if (type.BaseType == typeof(ToolStripProfessionalRenderer)) //Tipimiz ToolStripProfessionalRenderer sınıfından mı miras alıyor
                {
                    this.RenderStyles.Items.Add(type);  //Office2007 tipini at
                    if (type.Name == "Office2007")
                        this.RenderStyles.SelectedItem = type;
                }
                else if ((type.BaseType == typeof(KRBProfessionalColors)) && type.Name == "GrayStyles") //Tipimiz KRBProfessionalColors sınıfından mı miras alıyor
                {
                    this.ColorStyles.SelectedItem = type;
                }
            }
            //SetViewMenuItems();
        }

        #endregion

        #region Helper Methods

        // Renk Stilleri Ekleme Methodu
        private void RenderStyles_SelectedIndexChanged(object sender, EventArgs e)
        {
            Type type = RenderStyles.SelectedItem as Type;
            if (type != null)
            {
                ToolStripProfessionalRenderer toolStripRenderer = Activator.CreateInstance(type) as ToolStripProfessionalRenderer;  //Yeni bir instance yarat
                if (toolStripRenderer != null)
                {
                    if (toolStripRenderer.Equals(m_currentToolStripRenderer) == false)  //Şu anki tip değilse scope içerisine gir
                    {
                        this.ColorStyles.Items.Clear();

                        if (type == typeof(ToolStripProfessionalRenderer))
                            goto Finish;

                        Type baseType = toolStripRenderer.ColorTable.GetType().BaseType;
                        if (baseType != null)
                        {
                            System.Reflection.Assembly assembly = toolStripRenderer.ColorTable.GetType().Assembly;
                            if (assembly != null)
                            {
                                Type[] types = assembly.GetTypes();

                                foreach (Type colorTableType in types)
                                {
                                    if (colorTableType.IsClass && colorTableType.IsNotPublic && colorTableType.IsSealed && baseType.IsAssignableFrom(colorTableType))  //KRBProfessionalColors'tan miras almışmı?
                                    {
                                        this.ColorStyles.Items.Add(colorTableType);
                                    }
                                }
                            }
                        }

                    Finish:

                        this.m_currentToolStripRenderer = toolStripRenderer;
                        ToolStripManager.Renderer = this.m_currentToolStripRenderer;
                    }
                }
            }
        }

        //  Stili değiştirme metodu
        private void ColorStyles_SelectedIndexChanged(object sender, EventArgs e)
        {
            Type type = ColorStyles.SelectedItem as Type;
            if (type != null)
            {
                KRBProfessionalColors colorTable = Activator.CreateInstance(type) as KRBProfessionalColors;
                if (colorTable != null)
                {
                    if (colorTable.Equals(m_currentProfessionalColorTable) == false)
                    {
                        this.m_currentProfessionalColorTable = colorTable;
                        this.m_currentToolStripRenderer = Activator.CreateInstance(this.m_currentToolStripRenderer.GetType(), new object[] { colorTable }) as ToolStripProfessionalRenderer;
                        ToolStripManager.Renderer = this.m_currentToolStripRenderer;
                    }
                }
            }
        }

        #endregion
    }
}

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Software Developer (Senior) ARELTEK
Turkey Turkey
Since 1998...

MCPD - Enterprise Application Developer

“Hesaplı hareket ettiğini zanneden ve onunla iftihar eyliyen dar kafalar; kurtulmağa, yükselmeğe elverişli hiç bir eser vücüda getirmezler. Kurtuluş ve yükselişi, ancak varlığına dayanan ve mülkü milletin gizli kapalı hazinelerini verimli hale getirmesini bilen, şahsi menfaatini millet menfaati uğruna feda eden, ruhu idealist, dimağı realist şahsiyetlerde aramalıdır.”

Nuri Demirağ, 1947

Comments and Discussions