using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using Mesnac.Controls.Base; using System; using Mesnac.Controls.Default; using System.Drawing.Design; using System.Collections; using System.Windows.Forms; using System.ComponentModel.Design; using System.Globalization; namespace Mesnac.Controls.Compressor { [ToolboxBitmap(typeof(System.Windows.Forms.Button))] public partial class DisplayButton : Mesnac.Controls.Default.Button, IPurviewControl { private List _clickActionList = new List(); private List _keyDownActionList = new List(); private List _keyUpActionList = new List(); private bool _mcVisible = true; //保存可见性 private bool _mcEnabled = true; //保存可用性 private bool _isValid = true; //保存有效性 private object _mcvalue; private int _alarmvalue;//报警界限值 public DisplayButton() { InitializeComponent(); this.BackColor = buttonColor0; } public DisplayButton(IContainer container) { container.Add(this); InitializeComponent(); this.BackColor = buttonColor0; } public List ClickActionList { get { return this._clickActionList; } set { this._clickActionList = value; } } public List KeyDownActionList { get { return _keyDownActionList; } set { _keyDownActionList = value; } } public List KeyUpActionList { get { return _keyUpActionList; } set { _keyUpActionList = value; } } //业务 public string MCKey { get; set; } public object MCValue { get { return _mcvalue; } set { if (value == null) return; _mcvalue = value; int intVlaue = GetValue(_mcvalue); string ColorString = "buttonColor" + intVlaue.ToString(); Type type = this.GetType(); System.Reflection.PropertyInfo propertyInfo = type.GetProperty(ColorString); if (propertyInfo != null) { Color color = (Color)propertyInfo.GetValue(this,null); this.BackColor = color; } } } /// /// 如果是数组获取第一个字的值,如果是object获取Int值 /// /// /// private int GetValue(object ob) { //bool isArry = false; int IntValue = 0; try { object[] value = (object[])ob; IntValue = Convert.ToInt32(value[0]); } catch { IntValue = Convert.ToInt32(ob); } return IntValue; } #region 变化颜色 [Description("0号颜色"), Category("ChangeColor")] public Color buttonColor0 { get; set; } [Description("1号颜色"), Category("ChangeColor")] public Color buttonColor1 { get; set; } [Description("2号颜色"), Category("ChangeColor")] public Color buttonColor2 { get; set; } [Description("3号颜色"), Category("ChangeColor")] public Color buttonColor3 { get; set; } [Description("4号颜色"), Category("ChangeColor")] public Color buttonColor4 { get; set; } [Description("5号颜色"), Category("ChangeColor")] public Color buttonColor5 { get; set; } [Description("6号颜色"), Category("ChangeColor")] public Color buttonColor6 { get; set; } [Description("7号颜色"), Category("ChangeColor")] public Color buttonColor7 { get; set; } #endregion public IBaseControl MCRoot { get { return null; } set { ; } } #region 数据库的屏蔽,现在用不着 [TypeConverter(typeof(DataSourceConverter))] [Description("数据连接"), Category("Data")] public string MCDataSourceID { get; set; } public MCDataSource MCDataSource { get; set; } [Description("是否为数据库控件"), Category("Data")] public bool IsDbControl { get; set; } [Description("初始化SQL"), Category("Data")] public string InitDataSource { get; set; } [Description("执行SQL"), Category("Data")] public string ActionDataSource { get; set; } [Description("绑定数据源"), Category("Data")] public object BindDataSource { get; set; } [Description("操作类型"), Category("Data")] public DbOptionTypes DbOptionType { get; set; } #endregion [Description("是否可见"), Category("Behavior")] public bool MCVisible { get { return this._mcVisible; } set { this._mcVisible = value == null ? true : value; if (this.Site.DesignMode) { this.Visible = true; } else { this.Visible = this._mcVisible; } } } [Description("是否可用"), Category("Behavior")] public bool MCEnabled { get { return this._mcEnabled; } set { this._mcEnabled = value == null ? true : value; if (this.Site.DesignMode) { this.Enabled = true; } else { this.Enabled = this._mcEnabled; } } } [Description("是否控制权限"), Category("Behavior")] public bool MCPurview { get; set; } /// /// 报警界限值 /// public int Alarmvalue { get { return _alarmvalue; } set { _alarmvalue = value; } } public bool IsValid { get { return _isValid; } set { _isValid = value; } } } public class GenericListTypeConverter : TypeConverter { protected readonly TypeConverter typeConverter; public GenericListTypeConverter() { typeConverter = TypeDescriptor.GetConverter(typeof(T)); if (typeConverter == null) throw new InvalidOperationException("No type converter exists for type " + typeof(T).FullName); } protected virtual string[] GetStringArray(string input) { if (!String.IsNullOrEmpty(input)) { string[] result = input.Split(','); Array.ForEach(result, s => s.Trim()); return result; } else return new string[0]; } public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType) { //if (sourceType == typeof(string)) //{ // string[] items = GetStringArray(sourceType.ToString()); // return items.Any(); //} return base.CanConvertFrom(context, sourceType); } public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value) { if (value is string) { string[] items = GetStringArray((string)value); var result = new List(); Array.ForEach(items, s => { object item = typeConverter.ConvertFromInvariantString(s); if (item != null) { result.Add((T)item); } }); return result; } return base.ConvertFrom(context, culture, value); } public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType) { if (destinationType == typeof(string)) { string result = string.Empty; if (((IList)value) != null) { //we don't use string.Join() because it doesn't support invariant culture for (int i = 0; i < ((IList)value).Count; i++) { var str1 = Convert.ToString(((IList)value)[i], CultureInfo.InvariantCulture); result += str1; //don't add comma after the last element if (i != ((IList)value).Count - 1) result += ","; } } return result; } return base.ConvertTo(context, culture, value, destinationType); } } //public class MyColorCollection : BaseCollection, IList //{ // private ArrayList _innerList; // public MyColorCollection() // { // _innerList = new ArrayList(); // } // protected override ArrayList List // { // get // { // return (ArrayList)_innerList; // } // } // #region IList Members // public int Add(object value) // { // return this.List.Add(value); // } // public void Clear() // { // this.List.Clear(); // } // public bool Contains(object value) // { // return this.List.Contains(value); // } // public int IndexOf(object value) // { // return this.List.IndexOf(value); // } // public void Insert(int index, object value) // { // this.List.Insert(index, value); // } // public bool IsFixedSize // { // get { return this.List.IsFixedSize; } // } // public void Remove(object value) // { // this.List.Remove(value); // } // public void RemoveAt(int index) // { // this.List.RemoveAt(index); // } // public object this[int index] // { // get // { // return List[index]; // } // set // { // List[index] = value; // } // } // #endregion //} //public class MyCollectionEditor : CollectionEditor //{ // public MyCollectionEditor(Type type) // : base(type) // { } // /// // /// 限制一次选一个实例 // /// // /// // protected override bool CanSelectMultipleInstances() // { // return false; // } // /// // /// 指定创建的对象类型 // /// // /// // protected override Type CreateCollectionItemType() // { // return typeof(CSFrameworkNode); // } // protected override object CreateInstance(Type itemType) // { // //创建一个实例 // CSFrameworkNode o = (CSFrameworkNode)itemType.Assembly.CreateInstance(itemType.FullName); // IDesignerHost host = (IDesignerHost)this.GetService(typeof(IDesignerHost)); // host.Container.Add(o);//重要!自动生成组件的设计时代码! // //或者: // //this.Context.Container.Add(o);//重要!自动生成组件的设计时代码! // return o; // } // protected override void DestroyInstance(object instance) // { // base.DestroyInstance(instance);//重要!自动删除组件的设计时代码! // } //} }