颜色选择美化控件----------WinForm控件开发系列
发布时间:2020-12-15 07:45:41 所属栏目:Java 来源:网络整理
导读:下面是控件显示界面源码,日期选择面板源码太多了2000行左右,没有贴出来,可以下载源码去看。你可以完善这个颜色控件。 /// summary /// 颜色选择美化控件 /// /summary [ToolboxItem( true )] [DefaultProperty( " ColorPicker " )] [Description( " 颜色
下面是控件显示界面源码,日期选择面板源码太多了2000行左右,没有贴出来,可以下载源码去看。你可以完善这个颜色控件。 /// <summary> /// 颜色选择美化控件 /// </summary> [ToolboxItem(true)] [DefaultProperty("ColorPicker")] [Description("颜色选择美化控件")] public partial class ColorExt : Control { #region private bool backBorderShow = true; /// <summary> /// 是否显示边框 /// </summary> [DefaultValue(true)] [Description("是否显示边框")] public bool BackBorderShow { get { return this.backBorderShow; } set { if (this.backBorderShow == value) return; this.backBorderShow = value; this.Invalidate(); } } private ColorAnchors colorAnchor = ColorAnchors.Right; /// <summary> /// 颜色位置 /// </summary> [DefaultValue(ColorAnchors.Right)] [Description("颜色位置")] public ColorAnchors ColorAnchor { get { return this.colorAnchor; } set { if (this.colorAnchor == value) return; this.colorAnchor = value; this.Invalidate(); } } private Color backBorderColor = Color.FromArgb(192,192,192); /// <summary> /// 边框颜色 /// </summary> [DefaultValue(typeof(Color),"192,192,192")] [Description("边框颜色")] [Editor(typeof(ColorEditorExt),typeof(System.Drawing.Design.UITypeEditor))] public Color BackBorderColor { get { return this.backBorderColor; } set { if (this.backBorderColor == value) return; this.backBorderColor = value; this.Invalidate(); } } private ColorPickerExt colorPicker = null; /// <summary> /// 颜色选择面板 /// </summary> [Browsable(true)] [Description("颜色选择面板")] [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] public ColorPickerExt ColorPicker { get { return this.colorPicker; } set { this.colorPicker = value; } } protected override Size DefaultSize { get { return new Size(130,23); } } protected override Cursor DefaultCursor { get { return Cursors.Hand; } } /// <summary> /// 背景图 /// </summary> private static Image back_image = global::AnimationLibrary.Properties.Resources.squaresback; /// <summary> ///背景图平铺 /// </summary> private ImageAttributes back_image_ia = new ImageAttributes(); /// <summary> /// 颜色面板显示状态 /// </summary> private bool DisplayStatus = false; private ToolStripDropDown tsdd = null; private ToolStripControlHost tsch = null; private readonly StringFormat color_sf = new StringFormat() { Alignment = StringAlignment.Near,LineAlignment = StringAlignment.Center,Trimming = StringTrimming.None,FormatFlags = StringFormatFlags.NoWrap }; #endregion public ColorExt() { SetStyle(ControlStyles.UserPaint,true); SetStyle(ControlStyles.AllPaintingInWmPaint,true); SetStyle(ControlStyles.OptimizedDoubleBuffer,true); SetStyle(ControlStyles.ResizeRedraw,true); SetStyle(ControlStyles.SupportsTransparentBackColor,true); InitializeComponent(); this.BackColor = Color.FromArgb(255,255,255); this.ForeColor = Color.FromArgb(105,105,105); this.Font = new Font("微软雅黑",9); this.back_image_ia.SetWrapMode(WrapMode.Tile); this.ColorPicker = new ColorPickerExt(); this.tsdd = new ToolStripDropDown() { Padding = Padding.Empty }; this.tsch = new ToolStripControlHost(this.ColorPicker) { Margin = Padding.Empty,Padding = Padding.Empty }; tsdd.Items.Add(this.tsch); this.tsdd.Closed += new ToolStripDropDownClosedEventHandler(this.tsdd_Closed); this.ColorPicker.ValueChanged += new EventHandler(this.ColorPicker_ValueChanged); this.ColorPicker.ClearClick += new EventHandler(this.ColorPicker_ClearClick); this.ColorPicker.ConfirmClick += new EventHandler(this.ColorPicker_ConfirmClick); } protected override void OnPaint(PaintEventArgs e) { base.OnPaint(e); Graphics g = e.Graphics; if (this.BackBorderShow) { Pen backborder_pen = new Pen(this.BackBorderColor,1); g.DrawRectangle(backborder_pen,new Rectangle(e.ClipRectangle.X,e.ClipRectangle.Y,e.ClipRectangle.Width - 1,e.ClipRectangle.Height - 1)); backborder_pen.Dispose(); } int color_width = (int)(g.ClipBounds.Height - 4); int color_height = (int)(g.ClipBounds.Height - 4); Rectangle color_rect = new Rectangle(e.ClipRectangle.Right - color_width - 2,e.ClipRectangle.Y + (e.ClipRectangle.Height - color_height) / 2,color_width,color_height); Rectangle argb_rect = new Rectangle(e.ClipRectangle.X + 5,e.ClipRectangle.Width - color_width - 12,e.ClipRectangle.Height); if (this.ColorAnchor == ColorAnchors.Left) { color_rect = new Rectangle(e.ClipRectangle.X + 2,(e.ClipRectangle.Y + e.ClipRectangle.Height - color_height) / 2,color_height); argb_rect = new Rectangle(e.ClipRectangle.X + 2 + color_width + 5,e.ClipRectangle.Height); } g.DrawImage(back_image,color_rect,0,0,color_rect.Width,color_rect.Height,GraphicsUnit.Pixel,this.back_image_ia); if (this.ColorPicker.Value != Color.Empty) { SolidBrush argb_sb = new SolidBrush(this.ColorPicker.Value); g.FillRectangle(argb_sb,color_rect); argb_sb.Color = this.ForeColor; string argb_format = String.Format("{0},{1},{2},{3}",this.ColorPicker.Value.A,this.ColorPicker.Value.R,this.ColorPicker.Value.G,this.ColorPicker.Value.B); g.DrawString(argb_format,this.Font,argb_sb,argb_rect,color_sf); argb_sb.Dispose(); } } protected override void OnClick(EventArgs e) { base.OnClick(e); if (!this.DisplayStatus) { tsdd.Show(this.PointToScreen(new Point(0,this.Height + 2))); this.ColorPicker.InitializeColor(); } } protected override void Dispose(bool disposing) { if (disposing && (components != null)) { components.Dispose(); if (this.color_sf != null) this.color_sf.Dispose(); if (this.back_image_ia != null) this.back_image_ia.Dispose(); } base.Dispose(disposing); } private void ColorPicker_ValueChanged(object sender,EventArgs e) { this.Invalidate(); } private void ColorPicker_ClearClick(object sender,EventArgs e) { this.tsdd.Close(); this.DisplayStatus = false; this.Invalidate(); } private void ColorPicker_ConfirmClick(object sender,EventArgs e) { this.tsdd.Close(); this.DisplayStatus = false; } private void tsdd_Closed(object sender,ToolStripDropDownClosedEventArgs e) { this.Invalidate(); this.DisplayStatus = false; } /// <summary> /// 颜色位置 /// </summary> [Description("颜色位置")] public enum ColorAnchors { /// <summary> /// 左边 /// </summary> Left,/// <summary> /// 右边 /// </summary> Right } } 源码下载:颜色选择美化控件.zip (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |