110,534
社区成员
发帖
与我相关
我的任务
分享
Private Sub MyColorBtn1_Click(sender As Object, e As EventArgs) Handles MyColorBtn1.Click
'初始化
Using s As New Rayyu.ColorPicker(sender, MyColorBtn1.BackColor, 50)
'注册颜色变更事件
AddHandler s.OnColorChanged, AddressOf OnColorChange
'注册拾色器完成/退出事件
AddHandler s.OnColorCompleted, AddressOf OnColorCompleted
'拾色器窗口的标题
s.Text = "提示" & Now.ToString("yyyy-MM-dd HH:mm:ss")
'打开拾色器
s.Show()
End Using
End Sub
''' <summary>
''' 颜色更改时
''' </summary>
''' <param name="sender">回调对象</param>
''' <param name="e"></param>
Private Sub OnColorChange(sender As Object, e As Rayyu.ColorPickChangedEventArgs)
'dosomething
End Sub
''' <summary>
''' 点击了确定或取消并退出了颜色选择器
''' </summary>
''' <param name="sender">回调对象</param>
''' <param name="e"></param>
Private Sub OnColorCompleted(sender As Object, e As Rayyu.ColorPickCompletedEventArgs)
'dosomething
If e.iscancel Then
MsgBox("操作被取消!")
ElseIf e.NewColor.ToArgb = e.OldColor.ToArgb Then
MsgBox("颜色没有变化!")
Else
MsgBox("这是1个新的颜色!")
End If
End Sub
private void MyColorBtn1_Click(object sender, EventArgs e)
{
//初始化
using (Rayyu.ColorPicker s = new Rayyu.ColorPicker(sender, MyColorBtn1.BackColor, 50)) {
//注册颜色变更事件
s.OnColorChanged += OnColorChange;
//注册拾色器完成/退出事件
s.OnColorCompleted += OnColorCompleted;
//拾色器窗口的标题
s.Text = "提示" + DateAndTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
//打开拾色器
s.Show();
}
}
/// <summary>
/// 颜色更改时
/// </summary>
/// <param name="sender">回调对象</param>
/// <param name="e"></param>
private void OnColorChange(object sender, Rayyu.ColorPickChangedEventArgs e)
{
//dosomething
}
/// <summary>
/// 点击了确定或取消并退出了颜色选择器
/// </summary>
/// <param name="sender">回调对象</param>
/// <param name="e"></param>
private void OnColorCompleted(object sender, Rayyu.ColorPickCompletedEventArgs e)
{
//dosomething
if (e.iscancel) {
Interaction.MsgBox("操作被取消!");
} else if (e.NewColor.ToArgb == e.OldColor.ToArgb) {
Interaction.MsgBox("颜色没有变化!");
} else {
Interaction.MsgBox("这是1个新的颜色!");
}
}
internal partial class ColorPanel : Control
{
private float _fX = 0.5f;
private float _fY = 0.5f;
private Bitmap _imgColor = null;
private Color _colSelect = Color.Black;
public ColorPanel()
{
InitializeComponent();
this.SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
this.BackColor = Color.Red;
XValue = 0.5f;
YValue = 0.5f;
}
public event EventHandler SelectColorChanged;
public float XValue
{
get { return _fX; }
private set { _fX = value; }
}
public float YValue
{
get { return _fY; }
private set { _fY = value; }
}
public Color SelectColor
{
get { return _colSelect; }
private set
{
_colSelect = value;
OnSelectChanged(EventArgs.Empty);
}
}
public override Color BackColor
{
get
{
return base.BackColor;
}
set
{
base.BackColor = value;
CreateColorImage();
SelectColor = GetSelectColor(XValue, YValue);
}
}
protected Rectangle DrawRect
{
get;
set;
}
protected bool IsMouseDown
{
get;
set;
}
public void SetLocation(float x, float y)
{
x = x < 0 ? 0 : x; x = x > 1 ? 1 : x;
y = y < 0 ? 0 : y; y = y > 1 ? 1 : y;
XValue = x;
YValue = y;
this.Invalidate();
SelectColor = GetSelectColor(x, y);
//OnSelectChanged(EventArgs.Empty);
}
private Color GetSelectColor(float x, float y)
{
if (_imgColor != null)
{
int px = Convert.ToInt32(x * _imgColor.Width);
int py = Convert.ToInt32(y * _imgColor.Height);
if (px == _imgColor.Width)
{
px--;
}
if (py == _imgColor.Height)
{
py--;
}
Color c = _imgColor.GetPixel(px, py);
return c;
}
return Color.Black;
}
protected override void OnSizeChanged(EventArgs e)
{
base.OnSizeChanged(e);
CreateColorImage();
ComputeDrawRect();
}
protected override void OnPaint(PaintEventArgs pe)
{
base.OnPaint(pe);
if (pe.ClipRectangle.IntersectsWith(this.ClientRectangle))
{
//pe.Graphics.Clear(Color.Black);
if (_imgColor == null)
{
CreateColorImage();
}
if (_imgColor != null)
{
pe.Graphics.DrawImage(_imgColor, new Rectangle(0, 0, this.Width, this.Height));
}
if (DrawRect.IsEmpty)
{
ComputeDrawRect();
}
pe.Graphics.DrawRectangle(Pens.Black, DrawRect);
DrawSelect(pe);
}
}
protected override void OnMouseDown(MouseEventArgs e)
{
base.OnMouseDown(e);
IsMouseDown = true;
}
protected override void OnMouseUp(MouseEventArgs e)
{
base.OnMouseUp(e);
IsMouseDown = false;
SetLocation(e.Location);
}
protected override void OnMouseMove(MouseEventArgs e)
{
base.OnMouseMove(e);
if (IsMouseDown)
{
SetLocation(e.Location);
}
}
protected virtual void OnSelectChanged(EventArgs e)
{
if (SelectColorChanged != null)
{
SelectColorChanged(this, e);
}
}
protected void DrawSelect(PaintEventArgs e)
{
Point pt = new Point(Convert.ToInt32(XValue * this.Width),
Convert.ToInt32(YValue * this.Height));
pt.X = pt.X < 1 ? 1 : pt.X;
pt.X = pt.X > this.Width - 1 ? this.Width - 1 : pt.X;
pt.Y = pt.Y < 1 ? 1 : pt.Y;
pt.Y = pt.Y > this.Height - 1 ? this.Height - 1 : pt.Y;
Rectangle rect = new Rectangle(pt.X - 4, pt.Y - 4, 8, 8);
e.Graphics.SmoothingMode = SmoothingMode.AntiAlias;
Rectangle rectDraw = rect;
rectDraw = Rectangle.Inflate(rect, 1, 1);
e.Graphics.DrawEllipse(Pens.White, rectDraw);
rectDraw = Rectangle.Inflate(rect, -1, -1);
e.Graphics.DrawEllipse(Pens.White, rectDraw);
rectDraw = rect;
e.Graphics.DrawEllipse(Pens.Black, rectDraw);
}
private void ComputeDrawRect()
{
if (this.Width > 1 && this.Height > 1)
{
DrawRect = new Rectangle(0, 0, this.Width + 1, this.Height - 1);
}
}
private void CreateColorImage()
{
if (this.Width > 0 && this.Height > 0)
{
int width = 250;
int height = 200;
_imgColor = new Bitmap(width, height);
using (Graphics g = Graphics.FromImage(_imgColor))
{
LinearGradientBrush brush1 = new LinearGradientBrush(
Point.Empty, new Point(250, 0),
Color.White,
Color.Transparent);
LinearGradientBrush brush2 = new LinearGradientBrush(
Point.Empty, new Point(0, 200),
Color.FromArgb(0, Color.White),
Color.Black);
Rectangle rect = new Rectangle(0, 0, 250, 200);
g.FillRectangle(new SolidBrush(this.BackColor), rect);
g.FillRectangle(brush1, rect);
g.FillRectangle(brush2, rect);
}
}
}
private void SetLocation(Point pt)
{
if (Width > 0 && Height > 0)
{
float x = Convert.ToSingle(pt.X) / this.Width;
float y = Convert.ToSingle(pt.Y) / this.Height;
SetLocation(x, y);
}
}
}