⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 colordialog.cs

📁 SharpDevelop2.0.0 c#开发免费工具
💻 CS
字号:
// <file>
//     <copyright see="prj:///doc/copyright.txt"/>
//     <license see="prj:///doc/license.txt"/>
//     <owner name="Georg Brandl" email="g.brandl@gmx.net"/>
//     <version>$Revision: 915 $</version>
// </file>

using System;
using System.Windows.Forms;
using System.Drawing;

namespace ICSharpCode.SharpDevelop.Gui 
{

	public class ColorPaletteDialog : Form
	{		
		byte max = 40;	
		ColorPanel[] panel = new ColorPanel[40];	
		
		Color[] color = new Color[40]
		{
			//row 1
			Color.FromArgb(0,0,0), Color.FromArgb(153,51,0), Color.FromArgb(51,51,0), Color.FromArgb(0,51,0),
			Color.FromArgb(0,51,102), Color.FromArgb(0,0,128), Color.FromArgb(51,51,153), Color.FromArgb(51,51,51),
			
			//row 2
			Color.FromArgb(128,0,0), Color.FromArgb(255,102,0), Color.FromArgb(128,128,0), Color.FromArgb(0,128,0),
			Color.FromArgb(0,128,128), Color.FromArgb(0,0,255), Color.FromArgb(102,102,153), Color.FromArgb(128,128,128),
			
			//row 3
			Color.FromArgb(255,0,0), Color.FromArgb(255,153,0), Color.FromArgb(153,204,0), Color.FromArgb(51,153,102),
			Color.FromArgb(51,204,204), Color.FromArgb(51,102,255), Color.FromArgb(128,0,128), Color.FromArgb(153,153,153),
			
			//row 4
			Color.FromArgb(255,0,255), Color.FromArgb(255,204,0), Color.FromArgb(255,255,0), Color.FromArgb(0,255,0),
			Color.FromArgb(0,255,255), Color.FromArgb(0,204,255), Color.FromArgb(153,51,102), Color.FromArgb(192,192,192),
			
			//row 5
			Color.FromArgb(255,153,204), Color.FromArgb(255,204,153), Color.FromArgb(255,255,153), Color.FromArgb(204,255,204),
			Color.FromArgb(204,255,255), Color.FromArgb(153,204,255), Color.FromArgb(204,153,255), Color.FromArgb(255,255,255)						
		};	
		
		string[] colorName = new string[40]
		{
			"Black", "Brown", "Olive Green", "Dark Green", "Dark Teal", "Dark Blue", "Indigo", "Gray-80%",
			"Dark Red", "Orange", "Dark Yellow", "Green", "Teal", "Blue", "Blue-Gray", "Gray-50%",
			"Red", "Light Orange", "Lime", "Sea Green", "Aqua", "Light Blue", "Violet", "Gray-40%",
			"Pink", "Gold", "Yellow", "Bright Green", "Turquoise", "Sky Blue", "Plum", "Gray-25%",
			"Rose", "Tan", "Light Yellow", "Light Green", "Light Turquoise", "Pale Blue", "Lavender", "White"
		};	
		
		Button moreColorsButton = new Button();
		Button cancelButton = new Button();
		Color selectedColor;
		
		public ColorPaletteDialog(int x, int y)
		{
			Size = new Size(158, 158);					
			FormBorderStyle = FormBorderStyle.FixedDialog;	
			MinimizeBox = MaximizeBox = ControlBox = false;				
			ShowInTaskbar = false;					
			CenterToScreen();	
			Location = new Point(x, y);	
			
			BuildPalette();						
	
			moreColorsButton.Text = "More colors ...";			
			moreColorsButton.Size = new Size(142, 22);
			moreColorsButton.Location = new Point(5, 99);		
			moreColorsButton.Click += new EventHandler(moreColorsButton_Click);		
			moreColorsButton.FlatStyle = FlatStyle.Popup;
			Controls.Add(moreColorsButton);	
			
			//"invisible" button to cancel at Escape
			cancelButton.Text = "Cancel";
			cancelButton.Size = new Size(142, 22);
			cancelButton.Location = new Point(5, 125);		
			cancelButton.FlatStyle = FlatStyle.Popup;
			cancelButton.Click += new EventHandler(cancelButton_Click);				
			Controls.Add(cancelButton);	
			cancelButton.DialogResult = DialogResult.Cancel;
			this.CancelButton = cancelButton;
			
			moreColorsButton.TabIndex = 0;
		}
		
		public Color Color
		{
			get { return selectedColor; }
		}
		
		void BuildPalette()
		{
			byte pwidth = 16;
			byte pheight = 16;
			byte pdistance = 2;		
			byte border = 5;		
			int x = border, y = border;	
			ToolTip toolTip = new ToolTip();		
			
			for(int i = 0; i < max; i++)
			{
				panel[i] = new ColorPanel();			
				panel[i].Height = pwidth;
				panel[i].Width = pheight;			
				panel[i].Location = new Point(x, y);
				toolTip.SetToolTip(panel[i], colorName[i]);
						
				this.Controls.Add(panel[i]);			
				
				if(x < ( 7 * (pwidth + pdistance)))
					x += pwidth + pdistance;
				else
				{
					x = border;
					y += pheight + pdistance;
				}
				
				panel[i].BackColor = color[i];
				panel[i].MouseUp += new MouseEventHandler(OnPanelMouseUp);
			}
		}
		
		void OnPanelMouseUp(object sender, MouseEventArgs e)
		{
			Panel panel = (Panel)sender;
			selectedColor = panel.BackColor;
			DialogResult = DialogResult.OK;
			Close();
		}
		
		void moreColorsButton_Click(object sender, System.EventArgs e)
		{
			using (ColorDialog colDialog = new ColorDialog()) {
				colDialog.FullOpen = true;
				if (colDialog.ShowDialog(ICSharpCode.SharpDevelop.Gui.WorkbenchSingleton.MainForm) == DialogResult.OK) {
					selectedColor = colDialog.Color;
					DialogResult = DialogResult.OK;
				}
			}
			
			Close();
		}
		
		void cancelButton_Click(object sender, System.EventArgs e)
		{
			Close();
		}
		
		internal class ColorPanel : Panel
		{
			protected override void OnMouseEnter(EventArgs e)
			{
				base.OnMouseEnter(e);
				Draw(1, CreateGraphics());
			}
			
			protected override void OnMouseLeave(EventArgs e)
			{	
				base.OnMouseLeave(e);
				Draw(0, CreateGraphics());	
			}	
			
			protected override void OnMouseDown(MouseEventArgs e)
			{	
				base.OnMouseDown(e);
				Draw(2, CreateGraphics());				
			}
			
			protected override void OnPaint(PaintEventArgs e)
			{					
				Draw(0, e.Graphics);		
			} 
		
			void Draw(byte state, Graphics g)
			{		
				Pen pen1, pen2;
				
				if(state == 1) 		//mouse over
				{
					pen1 = new Pen( SystemColors.ControlLightLight ); 				
					pen2 = new Pen( SystemColors. ControlDarkDark);		
				}
				else if(state == 2)	//clicked
				{
					pen1 = new Pen( SystemColors.ControlDarkDark ); 				
					pen2 = new Pen( SystemColors.ControlLightLight );						
				}
				else				//neutral
				{
					pen1 = new Pen( SystemColors.ControlDark ); 				
					pen2 = new Pen( SystemColors.ControlDark );
					
				}	
				
				Rectangle r = ClientRectangle;
				Point p1 = new Point( r.Left, r.Top ); 				//top left
				Point p2 = new Point( r.Right -1, r.Top );			//top right
				Point p3 = new Point( r.Left, r.Bottom -1 );		//bottom left
				Point p4 = new Point( r.Right -1, r.Bottom -1 );	//bottom right
				
				g.DrawLine( pen1, p1, p2 ); 		
				g.DrawLine( pen1, p1, p3 ); 		
				g.DrawLine( pen2, p2, p4 ); 		
				g.DrawLine( pen2, p3, p4 ); 				
			}
			
		}
	}

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -