C#自定义控件一下拉颜色框
C#自定義控件一下拉顏色框
效果圖:
通過繼承ComboBox可以設(shè)計出類似C#控件屬性欄中的顏色下拉選擇框。
添加組件命名為myColorComboBox.cs
?
第一步:繼承ComboBox,public partial class myColorComboBox : ComboBox
?
第二步:構(gòu)造下拉顏色選擇框
private void InitItems()
??????? {
??????????? this.DrawMode = DrawMode.OwnerDrawFixed;//手動繪制所有元素
??????????? this.DropDownStyle = ComboBoxStyle.DropDownList;//下拉框樣式設(shè)置為不能編輯
??????????? this.Items.Clear();//清空原有項
??????????? Array allColors = Enum.GetValues(typeof(KnownColor));//獲取系統(tǒng)顏色名存入列表
??????????? foreach (KnownColor var in allColors)
??????? ????{
??????????????? this.Items.Add(var.ToString());?//加載該選項框的子項
??????????? }
??????????? this.SelectedIndex = 0;
??????? }
在兩個構(gòu)造函數(shù)中加入InitItems()
?
第三步:重寫OnDrawItem方法
protected override void OnDrawItem(DrawItemEventArgs e)
??????? {
??????????? if (e.Index >= 0)//判斷是否需要重繪
??????????? {
??????????????? string colorName = this.Items[e.Index].ToString();//獲取顏色名
??????????????? SolidBrush brush = new SolidBrush(Color.FromName(colorName));//定義畫刷
??????????????? Font font = new Font("宋體", 9);//定義字體
??????????? ????Rectangle rect = e.Bounds;
??????????????? rect.Inflate(-2, -2);
?
??????????????? Rectangle rectColor = new Rectangle(rect.Location, new Size(20, rect.Height));
??????????????? e.Graphics.FillRectangle(brush, rectColor);//填充顏色
??????????????? e.Graphics.DrawRectangle(Pens.Black, rectColor);//繪制邊框
??????????????? e.Graphics.DrawString(colorName, font, Brushes.Black, (rect.X + 22), rect.Y);//繪制文字
??????????? }
??????? }
?
第四步:增加控件屬性
?
/// <summary>
??????? /// 選擇的顏色名稱
??????? /// </summary>
??????? public string SelectColorName
??????? {
??????????? get { return this.Text; }
??????? }
?
??????? /// <summary>
??????? /// 選擇的顏色
??????? /// </summary>
??????? public Color SelectColor
??????? {
??????????? get { return Color.FromName(this.Text); }
??????? }
?
用法:
直接從控件欄中找到自定義控件myColorComboBox,拖過去自動命名為myColorCombBox1,可以通過myColorCombBox1.SelectColor獲取顏色,類型為Color,通過myColorCombBox1.SelectColorName獲取用戶選定的顏色名。
?
下面貼出全部代碼:
//控件名:myColorComboBox
//作者:劉典武
//時間:2011-06-01
?
using System;
using System.ComponentModel;
using System.Collections.Generic;
using System.Diagnostics;
using System.Text;
using System.Windows.Forms;
using System.Drawing;
?
namespace myControl
{
??? public partial class myColorComboBox : ComboBox
??? {
??????? public myColorComboBox()
??????? {
??????????? InitializeComponent();
??????????? InitItems();
??????? }
?
??????? public myColorComboBox(IContainer container)
??????? {
??????????? container.Add(this);
?
??????????? InitializeComponent();
??????????? InitItems();
??????? }
?
??????? private void InitItems()
??????? {
??????????? this.DrawMode = DrawMode.OwnerDrawFixed;//手動繪制所有元素
??????????? this.DropDownStyle = ComboBoxStyle.DropDownList;//下拉框樣式設(shè)置為不能編輯
??????????? this.Items.Clear();//清空原有項
??????????? Array allColors = Enum.GetValues(typeof(KnownColor));//獲取系統(tǒng)顏色名存入列表
??????????? foreach (KnownColor var in allColors)
??????????? {
??????????????? this.Items.Add(var.ToString());?//加載該選項框的子項
??????????? }
??????????? this.SelectedIndex = 0;
??????? }
?
??????? protected override void OnDrawItem(DrawItemEventArgs e)
??????? {
??????????? if (e.Index >= 0)//判斷是否需要重繪
??????????? {
??????????????? string colorName = this.Items[e.Index].ToString();//獲取顏色名
??????????????? SolidBrush brush = new SolidBrush(Color.FromName(colorName));//定義畫刷
??????????????? Font font = new Font("宋體", 9);//定義字體
??????????????? Rectangle rect = e.Bounds;
??????????????? rect.Inflate(-2, -2);
?
??????????????? Rectangle rectColor = new Rectangle(rect.Location, new Size(20, rect.Height));
??????????????? e.Graphics.FillRectangle(brush, rectColor);//填充顏色
??????????????? e.Graphics.DrawRectangle(Pens.Black, rectColor);//繪制邊框
??????????????? e.Graphics.DrawString(colorName, font, Brushes.Black, (rect.X + 22), rect.Y);//繪制文字
??????????? }
??????? }
?
??????? /// <summary>
??????? /// 選擇的顏色名稱
???? ???/// </summary>
??????? public string SelectColorName
??????? {
??????????? get { return this.Text; }
??????? }
?
??????? /// <summary>
??????? /// 選擇的顏色
??????? /// </summary>
??????? public Color SelectColor
??????? {
??????????? get { return Color.FromName(this.Text); }
??????? }
??? }
}
?
歡迎加入C#學(xué)習(xí)群(128874886)共同探討C#技術(shù),加的時候注明理由,本群熱烈歡迎積極分子或者.NET狂熱愛好者加入,希望大家積極學(xué)習(xí),一個月以上不說話者可能開除出群!
轉(zhuǎn)載于:https://www.cnblogs.com/feiyangqingyun/archive/2011/06/29/2093837.html
總結(jié)
以上是生活随笔為你收集整理的C#自定义控件一下拉颜色框的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: FTP虚拟账户的创建(1)
- 下一篇: 优米网:创业传记——傅盛