/// <summary> /// 编辑数据 /// </summary> /// <param name="context">参数</param> /// <param name="provider">参数</param> /// <param name="value">旧数据</param> /// <returns>编辑后的新数据</returns> public override object EditValue(ITypeDescriptorContext context, IServiceProvider provider, object value) { if (editor != null) { XColorValue xc = value as XColorValue; Color oldColor = xc == null ? Color.Empty : xc.Value; Color newColor = (Color)editor.EditValue(context, provider, oldColor); if (oldColor.Equals(newColor) == false) { return(new XColorValue(newColor)); } else { return(value); } } else { using (ColorDialog dlg = new ColorDialog()) { XColorValue xc = value as XColorValue; if (xc != null) { dlg.Color = xc.Value; if (dlg.ShowDialog() == DialogResult.OK) { return(new XColorValue(dlg.Color)); } } } } return(value); }
/// <summary> /// 复制对象 /// </summary> /// <returns>复制品</returns> object ICloneable.Clone() { XColorValue v = new XColorValue(); v._Value = this._Value; return(v); }
/// <summary> /// 绘制数据 /// </summary> /// <param name="e">参数</param> public override void PaintValue(PaintValueEventArgs e) { XColorValue color = e.Value as XColorValue; if (color == null) { color = new XColorValue(); } using (SolidBrush b = new SolidBrush(color.Value)) { e.Graphics.FillRectangle(b, e.Bounds); } }
/// <summary> /// 将颜色值转换为指定的类型的数据 /// </summary> /// <param name="context">参数</param> /// <param name="culture">参数</param> /// <param name="value">颜色值</param> /// <param name="destinationType">指定的数据类型</param> /// <returns>转换结果</returns> public override object ConvertTo(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value, Type destinationType) { XColorValue xc = value as XColorValue; if (destinationType.Equals(typeof(string))) { return(xc == null ? null : xc.StringValue); } else if (destinationType.Equals(typeof(Color))) { return(xc == null ? Color.Empty : xc.Value); } else if (destinationType.Equals(typeof(InstanceDescriptor))) { return(new InstanceDescriptor( typeof(XColorValue).GetConstructor(new Type[] { typeof(string) }), new object[] { xc.StringValue })); } return(null); }