Click here to Skip to main content
15,881,424 members
Articles / Programming Languages / C#

NeoTabControl Library

Rate me:
Please Sign up or sign in to vote.
4.96/5 (110 votes)
28 Sep 2012CPOL16 min read 194.7K   21.3K   163  
A custom .NET tab control for WinForms applications with add-in renderer support.
using System;
using System.Drawing;
using System.Windows.Forms;

namespace NeoTabControlLibrary
{
    public class DataGridViewEditorButtonColumn : DataGridViewButtonColumn
    {
        #region Constructor

        public DataGridViewEditorButtonColumn()
        {
            this.CellTemplate = new DataGridViewEditorButtonCell();
        }

        #endregion

        #region Destructor

        ~DataGridViewEditorButtonColumn()
        {
            GC.SuppressFinalize(this);
        }

        #endregion
    }

    public class DataGridViewEditorButtonCell : DataGridViewButtonCell
    {
        #region Static Members Of The Class

        private static DataGridViewEditorButtonColumn editorButtonColumn;

        #endregion

        #region Constructor

        public DataGridViewEditorButtonCell() { ; }

        #endregion

        #region Destructor

        ~DataGridViewEditorButtonCell()
        {
            GC.SuppressFinalize(this);
        }

        #endregion

        #region Property

        /// <summary>
        /// Determines whether this button cell is support renderer editing or not.
        /// </summary>
        public bool Enabled { get; set; }

        public DataGridViewEditorButtonColumn EditorButtonColumn
        {
            get
            {
                if (editorButtonColumn == null)
                {
                    // Instantiate a EditorButtonColumn instance from the base.OwningColumn property.
                    editorButtonColumn = base.OwningColumn as DataGridViewEditorButtonColumn;
                }
                return editorButtonColumn;
            }
        }

        public override object DefaultNewRowValue
        {
            get
            {
                // The default value is.
                return "...";
            }
        }

        #endregion

        #region Override Methods

        // Override the Clone method so that the Enabled property is copied. 
        public override object Clone()
        {
            DataGridViewEditorButtonCell cell =
                (DataGridViewEditorButtonCell)base.Clone();
            cell.Enabled = this.Enabled;
            return cell;
        }

        protected override void Paint(Graphics graphics,
        Rectangle clipBounds, Rectangle cellBounds, int rowIndex,
        DataGridViewElementStates elementState, object value,
        object formattedValue, string errorText,
        DataGridViewCellStyle cellStyle,
        DataGridViewAdvancedBorderStyle advancedBorderStyle,
        DataGridViewPaintParts paintParts)
        {
            // The button cell is disabled, so paint the border,   
            // background, and disabled button for the cell. 
            if (!Enabled)
            {
                // Draw the cell background, if specified. 
                if ((paintParts & DataGridViewPaintParts.Background) ==
                    DataGridViewPaintParts.Background)
                {
                    SolidBrush cellBackground =
                        new SolidBrush(cellStyle.BackColor);
                    graphics.FillRectangle(cellBackground, cellBounds);
                    cellBackground.Dispose();
                }

                // Draw the cell borders, if specified. 
                if ((paintParts & DataGridViewPaintParts.Border) ==
                    DataGridViewPaintParts.Border)
                {
                    PaintBorder(graphics, clipBounds, cellBounds, cellStyle,
                        advancedBorderStyle);
                }

                // Calculate the area in which to draw the button.
                Rectangle buttonArea = cellBounds;
                Rectangle buttonAdjustment =
                    this.BorderWidths(advancedBorderStyle);
                buttonArea.X += buttonAdjustment.X;
                buttonArea.Y += buttonAdjustment.Y;
                buttonArea.Height -= buttonAdjustment.Height;
                buttonArea.Width -= buttonAdjustment.Width;

                // Draw the disabled button.                
                ButtonRenderer.DrawButton(graphics, buttonArea,
                    System.Windows.Forms.VisualStyles.PushButtonState.Disabled);

                // Draw the disabled button text.  
                if (this.FormattedValue is String)
                {
                    TextRenderer.DrawText(graphics,
                        (string)this.FormattedValue,
                        this.DataGridView.Font,
                        buttonArea, SystemColors.GrayText);
                }
            }
            else
            {
                // The button cell is enabled, so let the base class  
                // handle the painting. 
                base.Paint(graphics, clipBounds, cellBounds, rowIndex,
                    elementState, value, formattedValue, errorText,
                    cellStyle, advancedBorderStyle, paintParts);
            }
        }

        #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