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);
                }
            }
        }
  • 相关阅读:
    Servlet的几种跳转(转)
    Java String.split()用法小结(转)
    表单数据提交的方法
    gedit文本编辑器乱码解决办法
    J-Link烧写bootloader到mini2440的Nor Flash
    虚拟机安装Fedora10系统遇到异常
    linux系统忘记root密码怎么办?
    编译busybox时出错及解决方案
    source insight代码查看器如何自定义添加文件类型
    < Objective-C >文件操作-NSFileHandle
  • 原文地址:https://www.cnblogs.com/rinack/p/4442244.html
Copyright © 2011-2022 走看看