https://github.com/samialtas/csharpcolorpicker
A comprehensive, Excel-style color picker component for C# WinForms. Features a circular hue/saturation wheel, brightness slider, standard palette grid, and live display of RGB, CMYK, and HEX values. Includes built-in support for web-safe and print-safe (CMYK) color modes.
https://github.com/samialtas/csharpcolorpicker
cmyk color-palette color-picker color-wheel csharp custom-control dotnet excel-style gdi-plus hex print-safe rgb ui-components web-safe winforms
Last synced: 2 months ago
JSON representation
A comprehensive, Excel-style color picker component for C# WinForms. Features a circular hue/saturation wheel, brightness slider, standard palette grid, and live display of RGB, CMYK, and HEX values. Includes built-in support for web-safe and print-safe (CMYK) color modes.
- Host: GitHub
- URL: https://github.com/samialtas/csharpcolorpicker
- Owner: samialtas
- License: lgpl-2.1
- Created: 2025-07-28T11:57:22.000Z (11 months ago)
- Default Branch: main
- Last Pushed: 2025-07-28T12:47:44.000Z (11 months ago)
- Last Synced: 2025-07-28T13:32:39.594Z (11 months ago)
- Topics: cmyk, color-palette, color-picker, color-wheel, csharp, custom-control, dotnet, excel-style, gdi-plus, hex, print-safe, rgb, ui-components, web-safe, winforms
- Language: C#
- Homepage:
- Size: 88.9 KB
- Stars: 1
- Watchers: 0
- Forks: 0
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
- Code of conduct: CODE_OF_CONDUCT.md
- Security: SECURITY.md
Awesome Lists containing this project
README
# 🎨 Excel-Style Color Picker for WinForms
A comprehensive, Excel-style color picker component for C# WinForms applications. This user control provides a modern and feature-rich interface for color selection, designed to be easily integrated as a drop-down from a button.
## ✨ Demo

## 🚀 Features
- **🌈 Circular Color Wheel**: An intuitive wheel for selecting hue and saturation.
- **🎚️ Brightness Slider**: A vertical slider to control the selected color's brightness (HSV Value).
- **▦ Standard Palette**: A pre-defined grid of theme colors, similar to Microsoft Office applications.
- **🔢 Live Value Display**: Instantly see the selected color's values in **HEX**, **RGB**, and **CMYK** formats.
- **🛡️ Safety Modes**:
- **Web-Safe Mode**: Snaps all color selections to the nearest web-safe color.
- **Print-Safe Mode**: Snaps all selections to their nearest CMYK-safe equivalent, ensuring better color fidelity in print.
- **⚠️ Safety Warnings**: Visual cues indicate if the current color is not web-safe or print-safe, with a one-click option to fix it.
- **👀 Original vs. New Color Preview**: Easily compare the newly selected color with the original one.
- **⌨️ Full Keyboard Navigation**: All elements of the control are fully accessible and navigable using the keyboard.
- **🧩 Easy Integration**: Simply add the `ExcelColorPopupButton` to your form. No other setup is required.
- **📦 Self-Contained**: The control is written entirely in C# and relies only on the standard .NET `System.Windows.Forms` and `System.Drawing` libraries. No external dependencies are needed.
## 🛠️ Getting Started
## 📋 Prerequisites
You need a .NET project with Windows Forms support. This component has been designed with .NET Framework 4.x or .NET 5/6/7/8 and later in mind.
## ⚙️ Installation
1. Clone this repository or download the source code.
2. Add the C# source files (`ExcelColorPopupButton.cs`, `ExcelColorDropDownControl.cs`, etc.) to your WinForms project.
3. Rebuild your project.
4. The `ExcelColorPopupButton` control should now appear in the Visual Studio Toolbox, ready to be dragged onto your forms.
## 💡 How to Use
The easiest way to use the color picker is with the `ExcelColorPopupButton` control.
1. **🖱️ Add the Button to Your Form**:
- After rebuilding your project, find the `ExcelColorPopupButton` in your Visual Studio Toolbox.
- Drag and drop it onto your form.
2. **⚡ Handle the `ColorChanged` Event**:
- Select the button on your form and go to the Events tab in the Properties window.
- Double-click the `ColorChanged` event to create a handler.
- Use this event to get the newly selected color and apply it to other controls or objects in your application.
```csharp
// Example: Change a Panel's background color when a new color is selected.
private void excelColorPopupButton1_ColorChanged(object sender, EventArgs e)
{
// Get the selected color from the button's property
Color newColor = excelColorPopupButton1.SelectedColor;
// Apply it to another control
panelToChange.BackColor = newColor;
// You can also get the value as a string for display
this.Text = $"Selected Color: {newColor}";
}
// You can also set the initial color of the button in your Form's Load event
private void Form1_Load(object sender, EventArgs e)
{
excelColorPopupButton1.SelectedColor = Color.CornflowerBlue;
}
```
## 🔍 Code Overview
The project is structured into several key classes:
- **`🔘 ExcelColorPopupButton`**: The main `Button` control that you add to your form. It handles painting the color preview and the drop-down arrow, and it manages the display of the `ExcelColorDropDown`.
- **`🔽 ExcelColorDropDown`**: A custom `ToolStripDropDown` that acts as a borderless window to host the main color picker user control.
- **`🎛️ ExcelColorDropDownControl`**: The core `UserControl` that contains all the UI elements: the circular picker, brightness slider, color grid, text boxes, and checkboxes. It manages all the internal logic for color updates and state changes.
- **`🌈 CircularColorPicker`**: A custom control that renders the HSL color wheel and handles user input (mouse and keyboard) for selecting hue and saturation.
- **`🎚️ BrightnessSlider`**: A custom control for the vertical brightness (value) slider.
- **`🔧 ColorUtils`**: A static helper class containing methods for color model conversions (RGB, HSV, HSL, CMYK) and color safety checks.
- **`📝 VerticallyCenteredTextBox`**: A small enhancement of the standard `TextBox` to vertically center its text.
- **`🖌️ DoubleBufferedPanel`**: A simple `Panel` with double-buffering enabled to prevent flicker in the color grid.
## 📜 License
This project is licensed under the MIT License. See the [LICENSE](LICENSE) file for details.