我想自己写一个"颜色设置对话框",不用系统给提供的"colorDialog".但不知如何下手,该调用系统的哪个函数才能调用出颜色面板中的那些可选择的颜色,还有系统提供的颜色等等.???

解决方案 »

  1.   

    System.Drawing.Color   绝对好用
      

  2.   

    可以使用从Control继承的任何一个,比如UserControl,Panel等,但是要自己使用Graphics绘制。比如:public class ColorPanel:Control
    {
    protected override void OnPaint(PaintEventArgs e)
    {
    base.OnPaint(e); Rectangle colorRect = new Rectangle(0, 0, 10, 10);
    foreach (KnownColor kc in Enum.GetValues(typeof(KnownColor)))
    {
    Color color = Color.FromKnownColor(kc);
    using (SolidBrush brush = new SolidBrush(color))
    {
    e.Graphics.FillRectangle(brush, colorRect);
    } if (colorRect.Right+colorRect.Width +2 < this.ClientRectangle.Right)
    {
    colorRect.X += colorRect.Width + 2;
    }
    else
    {
    colorRect.X = 0;
    colorRect.Y += colorRect.Height + 2;
    }
    }
    }
    public Color GetColor(int x, int y)
    {
    Rectangle colorRect = new Rectangle(0, 0, 10, 10);
    foreach (KnownColor kc in Enum.GetValues(typeof(KnownColor)))
    {
    if (colorRect.Contains(x, y))
    {
    return Color.FromKnownColor(kc);
    }
    if (colorRect.Right + colorRect.Width + 2 < this.ClientRectangle.Right)
    {
    colorRect.X += colorRect.Width + 2;
    }
    else
    {
    colorRect.X = 0;
    colorRect.Y += colorRect.Height + 2;
    }
    }
    return Color.Empty;
    }
    protected override void OnMouseClick(MouseEventArgs e)
    {
    base.OnMouseClick(e);
    Console.WriteLine(this.GetColor(e.X, e.Y));
    }
    }
      

  3.   

    我觉得可以添加一个窗体,上面可以画很多的Label 或是其它的控件,主要是设置它们的背景颜色供用户选择,还可以再加三个文本框,供用户直接输入RGB值。