zoukankan      html  css  js  c++  java
  • Ownerdrawn ComboBox

    [ToolboxBitmap(typeof(ComboBox))]
        class ComboBoxEx : ComboBox
        {
            public ComboBoxEx()
            {
                this.DrawMode = DrawMode.OwnerDrawFixed;
                this.DrawItem += ComboBoxEx_DrawItem;
                this.DropDownBorderColor = Color.Red;
                this.DropDownBackColor = Color.Yellow;
            }
    
            [Category("Appearance")]
            [Description("The border color of the drop down list")]
            [DefaultValue(typeof(Color), "Red")]
            public Color DropDownBorderColor { get; set; }
    
            [Category("Appearance")]
            [Description("The background color of the drop down list")]
            [DefaultValue(typeof(Color), "Yellow")]
            public Color DropDownBackColor { get; set; }
    
            void ComboBoxEx_DrawItem(object sender, DrawItemEventArgs e)
            {            
                if (e.Index < 0)
                    return;
    
                if ((e.State & DrawItemState.ComboBoxEdit) == DrawItemState.ComboBoxEdit)
                    return
    
                // Draw the background of the item.
                if (
                    ((e.State & DrawItemState.Focus) == DrawItemState.Focus) ||
                    ((e.State & DrawItemState.Selected) == DrawItemState.Selected) ||
                    ((e.State & DrawItemState.HotLight) == DrawItemState.HotLight)
                   )
                {
                    e.DrawBackground();
                }
                else
                {
                    Brush backgroundBrush = new SolidBrush(DropDownBackColor);
                    e.Graphics.FillRectangle(backgroundBrush, e.Bounds);
                }
    
                //Draw item text
                e.Graphics.DrawString(Items[e.Index].ToString(), this.Font, Brushes.Black, 
                  new RectangleF(e.Bounds.X, e.Bounds.Y, e.Bounds.Width, e.Bounds.Height));
    
                // Draw the focus rectangle if the mouse hovers over an item.
                if ((e.State & DrawItemState.Focus) == DrawItemState.Focus)
                    e.DrawFocusRectangle();
    
                //Draw the border around the whole DropDown area
                Pen borderPen = new Pen(DropDownBorderColor, 1);
                Point start;
                Point end;
    
                if (e.Index == 0)
                {
                    //Draw top border
                    start = new Point(e.Bounds.Left, e.Bounds.Top);
                    end = new Point(e.Bounds.Left + e.Bounds.Width - 1, e.Bounds.Top);
                    e.Graphics.DrawLine(borderPen, start, end);
                }
    
                //Draw left border
                start = new Point(e.Bounds.Left, e.Bounds.Top);
                end = new Point(e.Bounds.Left, e.Bounds.Top + e.Bounds.Height - 1);
                e.Graphics.DrawLine(borderPen, start, end);
    
                //Draw Right border
                start = new Point(e.Bounds.Left + e.Bounds.Width - 1, e.Bounds.Top);
                end = new Point(e.Bounds.Left + e.Bounds.Width - 1, e.Bounds.Top + e.Bounds.Height - 1);
                e.Graphics.DrawLine(borderPen, start, end);
    
                if (e.Index == Items.Count - 1)
                {
                    //Draw bottom border
                    start = new Point(e.Bounds.Left, e.Bounds.Top + e.Bounds.Height - 1);
                    end = new Point(e.Bounds.Left + e.Bounds.Width - 1, e.Bounds.Top + e.Bounds.Height - 1);
                    e.Graphics.DrawLine(borderPen, start, end);
                }
            }
        }
  • 相关阅读:
    UVa 1252 20个问题
    HDU 2196 Computer
    HDU 1520 Anniversary party
    HDU 2066 一个人的旅行
    UVa 10048 噪音恐惧症(Floyd)
    UVa 247 电话圈(Floyd传递闭包)
    HDU 2544 最短路(Dijkstra)
    HDU 1548 A strange lift (Dijkstra)
    UVa 1151 买还是建
    UVa 1395 苗条的生成树(Kruskal+并查集)
  • 原文地址:https://www.cnblogs.com/rinack/p/4442244.html
Copyright © 2011-2022 走看看