65.9K
CodeProject 正在变化。 阅读更多。
Home

一个快速、紧凑的 C# 颜色选择控件

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.62/5 (10投票s)

2005年2月22日

3分钟阅读

viewsIcon

78842

downloadIcon

1303

一个颜色选择控件,可以快速让用户找到他们想要的颜色。

Color Selection Demonstration

引言

你有没有想过选择一个颜色,然后对自己说:“我只是想要一个浅橙红色,但不要太刺眼”? 然后你得到了像 Windows 颜色选择对话框这样的选择控件,你必须花五分钟(或更长时间)来操作控件,才能最终得到你想要的颜色? 这个控件的设计考虑到了这个问题。它允许用户快速找到他们想要使用的颜色,并且它使用相对较小的屏幕空间来实现这一点。 该控件是可调整大小的,因此您可能会将其压缩得比演示中显示的还要小。它使用 .NET 双缓冲控件支持来实现无闪烁更新和即时用户反馈。

要使用该控件,您首先通过单击色调栏来选择您的颜色。它很好而且是线性的,因此您可以快速获得正确的色调(它使用的屏幕空间比您通常看到的大圆圈要少)。您可以单击大的向左或向右箭头来调整色调一步。按住按钮会启动一个计时器,其作用很像键盘重复,可以缓慢地移动色调。说到键盘,您也可以使用键盘上的向右和向左箭头来选择色调。

一旦你有了色调,移动亮度(更正式的名称是“光度”)和饱和度的滑块,就可以快速调整颜色的亮度和纯度。想要灰度?只需将饱和度一直调到零,然后调整亮度即可获得你的灰色阴影。

如果你想直接输入红色、绿色和蓝色值,左键单击显示所选颜色的区域将调出 Windows 颜色选择对话框。它将完全展开,因此您可以直接转到红色、绿色和蓝色编辑框。 选择“确定”会将颜色选择控件调整为你在此对话框中选择的颜色。

背景

我看过许多其他可用的颜色选择控件。 它们要么太重,因为它们会弹出一个复杂的对话框,要么太难快速找到颜色。 在设计此控件时,我采用了 Christian Rodemeyer 的名为 CColor 的 C++ 项目中的色调/亮度/饱和度 (HLS) 到红色/绿色/蓝色 (RGB) 转换代码,该项目位于 CodeProject 上 这里。 谢谢 Christian!

使用代码

在您的表单代码顶部包含一个 #using CustomUIControls; 语句。然后,通过右键单击您的项目并选择“添加引用...”,然后浏览到 DLL 所在的位置,添加对CustomUIControls.dll的引用。然后将控件添加到您的表单。最后,如果您希望在用户更改控件中的颜色时收到通知,请从 IColorSelectCallback 接口派生您的控件。源代码中通过 TextStylePicker 控件提供了一个如何使用颜色选择控件的示例,该控件允许您选择文本的前景色、背景色和字体。此外,还有一个带有图形箭头的按钮,您也可以重复使用它。这是一个在表单上使用颜色选择控件的概要示例

public class MyCustomForm : System.Windows.Forms.Form, IColorSelectCallback
{
  // ... member variables ...
  private ColorSelectControl cscColorSelect;

  // ... form designer ...
  private void InitializeComponent()
  {
     // ... add this here once, then you can
     // mess with the properties in Form Designer ...
     this.cscColorSelect = new CustomUIControls.ColorSelectControl();
  }

  // ... form load, you can initialize properties if you wish ...
  private void OnFormLoad(object sender, System.EventArgs e)
  {

    // set the starting color
    cscColorSelect.SelectedColor = m_ForeColor;

    // put ourselves in as callback
    cscColorSelect.CallbackHost = this;
  }

  //////////////////////////////////////////////////////
  // Interface Implementation
  //////////////////////////////////////////////////////
  #region IColorSelectCallback Members

  /// <summary>
  /// One of the custom color select controls has changed its color
  /// </summary>
  /// <param name="ControlID">The unique ID of the control that changed</param>
  /// <param name="clrNewColor">The new color</param>
  public void ColorChanged(int ControlID, Color clrNewColor)
  {
      // ... do stuff here because the color has changed ...
  } // ColorChanged()

  #endregion

} // class MyCustomForm

历史

  • 版本 1.0
    • 初始发布。
© . All rights reserved.