返回顶部
首页 > 资讯 > 精选 >使用c#怎么实现一个颜色选择控件
  • 717
分享到

使用c#怎么实现一个颜色选择控件

2023-06-14 13:06:57 717人浏览 薄情痞子
摘要

使用C#怎么实现一个颜色选择控件?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。代码://颜色拾取框using System;using System.Com

使用C#怎么实现一个颜色选择控件?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

代码:

//颜色拾取框using System;using System.ComponentModel;using System.Drawing;using System.windows.FORMs;namespace CRMVMixer{    //event handler delegate    public delegate void ColorChangedHandler(object sender, ColorChangeArgs e);    [ToolboxBitmap(typeof(ComboBox))]    public class ColorComboBox : ComboBox    {        private PopupWindow popupWnd;        private ColorPopup colors = new ColorPopup();        private Color selectedColor = Color.Black;        private Timer timer = new Timer();        public event ColorChangedHandler ColorChanged;        //constructor...        public ColorComboBox()            : this(Color.Black)        {        }        public ColorComboBox(Color selectedColor)        {            this.SuspendLayout();            //             // ColorCombo            //             this.AutoSize = false;            this.Size = new Size(92, 22);            this.Text = string.Empty;            this.DrawMode = DrawMode.OwnerDrawFixed;            this.DropDownStyle = ComboBoxStyle.DropDownList;            this.ItemHeight = 16;            timer.Tick += new EventHandler(OnCheckStatus);            timer.Interval = 50;            timer.Start();            colors.SelectedColor = this.selectedColor = selectedColor;            this.ResumeLayout(false);        }        [DefaultValue(typeof(Color), "Black")]        public Color SelectedColor        {            get { return selectedColor; }            set            {                selectedColor = value;                colors.SelectedColor = value;                Invalidate();            }        }        protected override void WndProc(ref Message m)        {            //256: WM_KEYDOWN, 513: WM_LBUTTONDOWN, 515: WM_LBUTTONDBLCLK            if (m.Msg == 256 || m.Msg == 513 || m.Msg == 515)            {                if (m.Msg == 513)                    PopupColorPalette();                return;            }            base.WndProc(ref   m);        }        private void PopupColorPalette()        {            //create a popup window            popupWnd = new PopupWindow(colors);            //calculate its position in screen coordinates            Rectangle rect = Bounds;            rect = this.Parent.RectangleToScreen(rect);            Point pt = new Point(rect.Left, rect.Bottom);            //tell it that we want the ColorChanged event            popupWnd.ColorChanged += new ColorChangedHandler(OnColorChanged);            //show the popup            popupWnd.Show(pt);            //disable the button so that the user can't click it            //while the popup is being displayed            this.Enabled = false;            this.timer.Start();        }        //event handler for the color change event from the popup window        //simply relay the event to the parent control        protected void OnColorChanged(object sender, ColorChangeArgs e)        {            //if a someone wants the event, and the color has actually changed            //call the event handler            if (ColorChanged != null && e.color != this.selectedColor)            {                this.selectedColor = e.color;                ColorChanged(this, e);            }            else //otherwise simply make note of the new color                this.selectedColor = e.color;        }        protected override void OnDrawItem(DrawItemEventArgs e)        {            var g = e.Graphics;            e.DrawBackground();            var brush = new SolidBrush(this.selectedColor);            var rect = e.Bounds;            rect.Width -= 1;            rect.Height -= 1;            g.FillRectangle(brush, rect);            g.DrawRectangle(Pens.Black, rect);            e.DrawFocusRectangle();        }        //This is the timer call back function. It checks to see         //if the popup went from a visible state to an close state        //if so then it will uncheck and enable the button        private void OnCheckStatus(object sender, EventArgs e)        {            if (popupWnd != null && !popupWnd.Visible)            {                this.timer.Stop();                this.Enabled = true;            }        }        /// <summary>        /// a button style radio button that shows a color        /// </summary>        private class ColorRadioButton : RadioButton        {            public ColorRadioButton(Color color, Color backColor)            {                this.ClientSize = new Size(21, 21);                this.Appearance = Appearance.Button;                this.Name = "button";                this.Visible = true;                this.ForeColor = color;                this.FlatAppearance.BorderColor = backColor;                this.FlatAppearance.BorderSize = 0;                this.FlatStyle = FlatStyle.Flat;                this.Paint += new PaintEventHandler(OnPaintButton);            }            private void OnPaintButton(object sender, PaintEventArgs e)            {                //paint a square on the face of the button using the controls foreground color                Rectangle colorRect = new Rectangle(ClientRectangle.Left + 5, ClientRectangle.Top + 5, ClientRectangle.Width - 9, ClientRectangle.Height - 9);                e.Graphics.FillRectangle(new SolidBrush(this.ForeColor), colorRect);                e.Graphics.DrawRectangle(Pens.DarkGray, colorRect);            }        }        ///<summary>        ///this is the popup window.  This window will be the parent of the         ///window with the color controls on it        ///</summary>        private class PopupWindow : ToolStripDropDown        {            public event ColorChangedHandler ColorChanged;            private ToolStripControlHost host;            private ColorPopup content;            public Color SelectedColor            {                get { return content.SelectedColor; }            }            public PopupWindow(ColorPopup content)            {                if (content == null)                    throw new ArgumentNullException("content");                this.content = content;                this.AutoSize = false;                this.DoubleBuffered = true;                this.ResizeRedraw = true;                //create a host that will host the content                host = new ToolStripControlHost(content);                this.Padding = Margin = host.Padding = host.Margin = Padding.Empty;                this.MinimumSize = content.MinimumSize;                content.MinimumSize = content.Size;                MaximumSize = new Size(content.Size.Width + 1, content.Size.Height + 1);                content.MaximumSize = new Size(content.Size.Width + 1, content.Size.Height + 1);                Size = new Size(content.Size.Width + 1, content.Size.Height + 1);                content.Location = Point.Empty;                //add the host to the list                Items.Add(host);            }            protected override void OnClosed(ToolStripDropDownClosedEventArgs e)            {                //when the window close tell the parent that the color changed                if (ColorChanged != null)                    ColorChanged(this, new ColorChangeArgs(this.SelectedColor));            }        }        ///<summary>        ///this class represends the control that has all the color radio buttons.        ///this control gets embedded into the PopupWindow class.        ///</summary>        private class ColorPopup : UserControl        {            //private Color[] colors = { Color.Black, Color.Gray, Color.Maroon, Color.Olive, Color.Green, Color.Teal, Color.Navy, Color.Purple, Color.White, Color.Silver, Color.Red, Color.Yellow, Color.Lime, Color.Aqua, Color.Blue, Color.Fuchsia };            private Color[] colors = {                Color.Black, Color.Navy, Color.DarkGreen, Color.DarkCyan, Color.DarkRed, Color.DarkMagenta, Color.Olive,                Color.LightGray, Color.DarkGray, Color.Blue, Color.Lime, Color.Cyan, Color.Red, Color.Fuchsia,                 Color.Yellow, Color.White, Color.RoyalBlue, Color.MediumBlue,  Color.LightGreen, Color.MediumspringGreen, Color.Chocolate,                Color.Pink, Color.Khaki, Color.WhiteSmoke, Color.BlueViolet, Color.DeepSkyBlue, Color.OliveDrab, Color.SteelBlue,                Color.DarkOrange, Color.Tomato, Color.HotPink, Color.DimGray,            };            private string[] colorNames = {                "黑色", "藏青", "深绿", "深青", "红褐", "洋红", "褐绿",                 "浅灰", "灰色", "蓝色", "绿色", "青色", "红色", "紫红",                 "黄色", "白色", "蓝灰", "藏蓝", "淡绿", "青绿", "黄褐",                 "粉红", "嫩黄", "银白", "紫色", "天蓝", "灰绿", "青蓝",                 "橙黄", "桃红", "英红", "深灰"            };            private ToolTip toolTip = new ToolTip();            private ColorRadioButton[] buttons;            private Button moreColorsBtn;            private Color selectedColor = Color.Black;            ///<summary>            ///get or set the selected color            ///</summary>            public Color SelectedColor            {                get { return selectedColor; }                set                {                    selectedColor = value;                    Color[] colors = this.colors;                    for (int i = 0; i < colors.Length; i++)                        buttons[i].Checked = selectedColor == colors[i];                }            }            private void InitializeComponent()            {                this.SuspendLayout();                this.Name = "Color Popup";                this.Text = string.Empty;                this.ResumeLayout(false);            }            public ColorPopup()            {                InitializeComponent();                SetupButtons();                this.Paint += new PaintEventHandler(OnPaintBorder);            }            //place the buttons on the window.            private void SetupButtons()            {                Controls.Clear();                int x = 1;                int y = 2;                int breakCount = 7;                Color[] colors = this.colors;                this.buttons = new ColorRadioButton[colors.Length];                this.ClientSize = new Size(139, 137);                //color buttons                for (int i = 0; i < colors.Length; i++)                {                    if (i > 0 && i % breakCount == 0)                    {                        y += 19;                        x = 1;                    }                    buttons[i] = new ColorRadioButton(colors[i], this.BackColor);                    buttons[i].Location = new Point(x, y);                    toolTip.SetToolTip(buttons[i], colorNames[i]);                    Controls.Add(buttons[i]);                    buttons[i].Click += new EventHandler(BtnClicked);                    if (selectedColor == colors[i])                        buttons[i].Checked = true;                    x += 19;                }                //line...                y += 24;                var label = new Label();                label.AutoSize = false;                label.Text = string.Empty;                label.Width = this.Width - 5;                label.Height = 2;                label.BorderStyle = BorderStyle.Fixed3D;                label.Location = new Point(4, y);                Controls.Add(label);                //button                y += 7;                moreColorsBtn = new Button();                moreColorsBtn.FlatStyle = FlatStyle.Popup;                moreColorsBtn.Text = "其它颜色...";                moreColorsBtn.Location = new Point(6, y);                moreColorsBtn.ClientSize = new Size(127, 23);                moreColorsBtn.Click += new EventHandler(OnMoreClicked);                Controls.Add(moreColorsBtn);            }            private void OnPaintBorder(object sender, PaintEventArgs e)            {                var rect = this.ClientRectangle;                rect.Width -= 1;                rect.Height -= 1;                e.Graphics.DrawRectangle(new Pen(SystemColors.WindowFrame), rect);            }            public void BtnClicked(object sender, EventArgs e)            {                selectedColor = ((ColorRadioButton)sender).ForeColor;                ((ToolStripDropDown)Parent).Close();            }            public void OnMoreClicked(object sender, EventArgs e)            {                ColorDialog dlg = new ColorDialog();                dlg.Color = SelectedColor;                if (dlg.ShowDialog(this) == DialogResult.OK)                    selectedColor = dlg.Color;                ((ToolStripDropDown)Parent).Close();            }        }    }    //define the color changed event argument    public class ColorChangeArgs : System.EventArgs    {        //the selected color        public Color color;        public ColorChangeArgs(Color color)        {            this.color = color;        }    }}

看完上述内容,你们掌握使用c#怎么实现一个颜色选择控件的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注编程网精选频道,感谢各位的阅读!

--结束END--

本文标题: 使用c#怎么实现一个颜色选择控件

本文链接: https://lsjlt.com/news/271334.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 使用c#怎么实现一个颜色选择控件
    使用c#怎么实现一个颜色选择控件?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。代码://颜色拾取框using System;using System.Com...
    99+
    2023-06-14
  • c# 颜色选择控件的实现代码
    参考ColorComboBox做修改,并对颜色名做些修正,用于CR MVMixer产品中,聊作备忘~ 效果图: 代码: //颜色拾取框 using System; using ...
    99+
    2024-04-02
  • 怎么使用JavaScript快速实现一个颜色选择器
    本文小编为大家详细介绍“怎么使用JavaScript快速实现一个颜色选择器”,内容详细,步骤清晰,细节处理妥当,希望这篇“怎么使用JavaScript快速实现一个颜色选择器”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知...
    99+
    2023-07-05
  • JavaScript快速实现一个颜色选择器
    目录颜色模型HSV 与 HSL 的区别实现选择器色相饱和度和明亮度hsv转rgb透明度基于HSL的颜色选择器使用canvas在做前端界面开发的时候,遇到需要改变颜色的需求,就需要使用...
    99+
    2023-02-22
    JavaScript实现颜色选择器 JavaScript颜色选择器 JavaScript选择器
  • 怎么用vbs实现选择颜色
    这篇文章主要介绍“怎么用vbs实现选择颜色”,在日常操作中,相信很多人在怎么用vbs实现选择颜色问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么用vbs实现选择颜色”的疑惑有所帮助!接下来,请跟着小编一起来...
    99+
    2023-06-08
  • JavaScript中怎么实现一个城市选择控件
    JavaScript中怎么实现一个城市选择控件,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。实现的步骤:一、先用一定的格式罗列...
    99+
    2024-04-02
  • 使用Amaze UI怎么实现一个文件选择域
    本篇文章给大家分享的是有关使用Amaze UI怎么实现一个文件选择域,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。文件选择域<input type="file&...
    99+
    2023-06-09
  • android开发中怎么实现一个日期选择控件
    android开发中怎么实现一个日期选择控件?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。效果如下:具体实现方法为:先新建一个安卓项目DoubleDatePicker,在res...
    99+
    2023-05-31
    android roi
  • C#中WPF颜色对话框控件的实现
    在 C# WPF开发中颜色对话框控件(ColorDialog)用于对界面中的背景、文字…(拥有颜色属性的所有控件)设置颜色,例如设置标签控件的背景色。 颜色对话框的运行...
    99+
    2024-04-02
  • 怎么在Android应用中实现一个IOS 滚轮选择控件
    今天就跟大家聊聊有关怎么在Android应用中实现一个IOS 滚轮选择控件,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。代码如下:public class Uti...
    99+
    2023-05-31
    android ios roi
  • 如何使用HTML5技术开发一个超酷颜色选择器
    如何使用HTML5技术开发一个超酷颜色选择器,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。 可能大家见过很多使用...
    99+
    2024-04-02
  • C++中怎么使用cvtColor实现颜色转换
    这篇文章主要讲解了“C++中怎么使用cvtColor实现颜色转换”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++中怎么使用cvtColor实现颜色转换”吧!前言在我们读取图像时通常会用到...
    99+
    2023-06-30
  • C++怎么实现颜色排序
    这篇文章主要介绍了C++怎么实现颜色排序的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C++怎么实现颜色排序文章都会有所收获,下面我们一起来看看吧。颜色排序Example:Input: [2,0,2,1,1,0...
    99+
    2023-06-19
  • 怎么使用C#实现一个PPT遥控器
    这篇文章给大家分享的是有关怎么使用C#实现一个PPT遥控器的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。说明本项目参考了 https://github.com/yangzhongke/PhoneAsPrompte...
    99+
    2023-06-15
  • C#中怎么实现一个日历控件
    本篇文章给大家分享的是有关C#中怎么实现一个日历控件,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。定制C#日历控件在把会议添加到数据库中之前,先修改一下日历的显示。***用另一...
    99+
    2023-06-18
  • C#中怎么实现一个选择排序算法
    C#中怎么实现一个选择排序算法,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。以下就是C#选择排序的实现方法:using System; &n...
    99+
    2023-06-18
  • Vue+elementUI下拉框自定义颜色选择器怎么实现
    这篇“Vue+elementUI下拉框自定义颜色选择器怎么实现”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Vue+elem...
    99+
    2023-07-05
  • 使用C#实现一个PPT遥控器
    目录说明截图具体实现1、在 Win Form项目中内嵌HTTP服务器操作PPT获取注释完善服务器完成前端说明 本项目参考了 https://github.com/yangzhongk...
    99+
    2024-04-02
  • 使用vue与bootstrap怎么实现一个时间选择器
    使用vue与bootstrap怎么实现一个时间选择器,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。在vue项目文件中引入import ...
    99+
    2024-04-02
  • Android中怎么使用Spinner实现一个列表选择框
    本篇文章为大家展示了Android中怎么使用Spinner实现一个列表选择框,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Android  Spinner列表选择框的应用Spinner 是...
    99+
    2023-05-30
    android spinner
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作