public override object EditValue( ITypeDescriptorContext context, IServiceProvider provider, object value) { //use IWindowsFormsEditorService object to display a control in the dropdown area IWindowsFormsEditorService frmsvr = (IWindowsFormsEditorService)provider.GetService(typeof(IWindowsFormsEditorService)); if (frmsvr == null) { return(null); } SliderPropertyEditor slider = new SliderPropertyEditor(); slider.editorService = frmsvr; slider.contextDescriptor = context; slider.isDecimalValue = false; slider.trackLimits = new Point(0, 100); PropertyDescriptor propertydesc = null; if (context.PropertyDescriptor.Attributes.Count == 0) { System.Type propertyType = context.PropertyDescriptor.GetType(); System.Reflection.FieldInfo fieldInfo = propertyType.GetField( "descriptors", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance ); PropertyDescriptor[] descriptors = (PropertyDescriptor[])(fieldInfo.GetValue(context.PropertyDescriptor)); propertydesc = descriptors[0]; } else { propertydesc = context.PropertyDescriptor; } foreach (Attribute att in propertydesc.Attributes) { if (att is AmbientValueAttribute) { AmbientValueAttribute tempAmbiantAttribute = att as AmbientValueAttribute; if (tempAmbiantAttribute.Value is string) { string paramStr = tempAmbiantAttribute.Value as string; string[] splittedParams = paramStr.Split('/'); //Treat Type if (splittedParams[0].Equals("float")) { slider.isFloatValue = true; } else if (splittedParams[0].Equals("decimal")) { slider.isDecimalValue = true; } //Treat Limits string strMin = splittedParams[1].Split(',')[0]; int min = 0; int.TryParse(strMin, out min); string strMax = splittedParams[1].Split(',')[1]; int max = 0; int.TryParse(strMax, out max); slider.trackLimits = new Point(min, max); break; } } } slider.trackBar.Minimum = slider.trackLimits.X; slider.trackBar.Maximum = slider.trackLimits.Y; if (context.PropertyDescriptor.Attributes.Count == 0) { if (slider.isDecimalValue == true || slider.isFloatValue == true) { int defaultValue = (slider.trackBar.Minimum + slider.trackBar.Maximum) / 2; defaultValue = Convert.ToInt32(Convert.ToDouble(defaultValue) * 100); slider.trackBar.Value = defaultValue; slider.trackBar.TickFrequency = 10; } else { int defaultValue = (slider.trackBar.Minimum + slider.trackBar.Maximum) / 2; slider.trackBar.Value = defaultValue; } } else { if (slider.isDecimalValue == true || slider.isFloatValue == true) { int currentValue = Convert.ToInt32(Convert.ToDouble(value) * 100); slider.trackBar.Value = currentValue; slider.trackBar.TickFrequency = 10; } else { int currentValue = Convert.ToInt32(value); slider.trackBar.Value = currentValue; } } frmsvr.DropDownControl(slider); if (slider.isDecimalValue == true) { decimal finalValue = (decimal)((float)slider.trackBar.Value / 100.0f); slider.Dispose(); return(finalValue); } else if (slider.isFloatValue == true) { float finalValue = (float)slider.trackBar.Value / 100.0f; slider.Dispose(); return(finalValue); } else { int finalValue = slider.trackBar.Value; slider.Dispose(); return(finalValue); } }
public override object EditValue( ITypeDescriptorContext context, IServiceProvider provider, object value) { //use IWindowsFormsEditorService object to display a control in the dropdown area IWindowsFormsEditorService frmsvr = (IWindowsFormsEditorService)provider.GetService(typeof(IWindowsFormsEditorService)); if (frmsvr == null) return null; SliderPropertyEditor slider = new SliderPropertyEditor(); slider.editorService = frmsvr; slider.contextDescriptor = context; slider.isDecimalValue = false; slider.trackLimits = new Point(0, 100); PropertyDescriptor propertydesc = null; if (context.PropertyDescriptor.Attributes.Count == 0) { System.Type propertyType = context.PropertyDescriptor.GetType(); System.Reflection.FieldInfo fieldInfo = propertyType.GetField( "descriptors", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance ); PropertyDescriptor[] descriptors = (PropertyDescriptor[])(fieldInfo.GetValue(context.PropertyDescriptor)); propertydesc = descriptors[0]; } else propertydesc = context.PropertyDescriptor; foreach (Attribute att in propertydesc.Attributes) { if (att is AmbientValueAttribute) { AmbientValueAttribute tempAmbiantAttribute = att as AmbientValueAttribute; if (tempAmbiantAttribute.Value is string) { string paramStr = tempAmbiantAttribute.Value as string; string[] splittedParams = paramStr.Split('/'); //Treat Type if (splittedParams[0].Equals("float")) slider.isFloatValue = true; else if (splittedParams[0].Equals("decimal")) slider.isDecimalValue = true; //Treat Limits string strMin = splittedParams[1].Split(',')[0]; int min = 0; int.TryParse(strMin, out min); string strMax = splittedParams[1].Split(',')[1]; int max = 0; int.TryParse(strMax, out max); slider.trackLimits = new Point(min, max); break; } } } slider.trackBar.Minimum = slider.trackLimits.X; slider.trackBar.Maximum = slider.trackLimits.Y; if (context.PropertyDescriptor.Attributes.Count == 0) { if (slider.isDecimalValue == true || slider.isFloatValue == true) { int defaultValue = (slider.trackBar.Minimum + slider.trackBar.Maximum) / 2; defaultValue = Convert.ToInt32(Convert.ToDouble(defaultValue) * 100); slider.trackBar.Value = defaultValue; slider.trackBar.TickFrequency = 10; } else { int defaultValue = (slider.trackBar.Minimum + slider.trackBar.Maximum) / 2; slider.trackBar.Value = defaultValue; } } else { if (slider.isDecimalValue == true || slider.isFloatValue == true) { int currentValue = Convert.ToInt32(Convert.ToDouble(value) * 100); slider.trackBar.Value = currentValue; slider.trackBar.TickFrequency = 10; } else { int currentValue = Convert.ToInt32(value); slider.trackBar.Value = currentValue; } } frmsvr.DropDownControl(slider); if (slider.isDecimalValue == true) { decimal finalValue = (decimal)((float)slider.trackBar.Value / 100.0f); slider.Dispose(); return finalValue; } else if (slider.isFloatValue == true) { float finalValue = (float)slider.trackBar.Value / 100.0f; slider.Dispose(); return finalValue; } else { int finalValue = slider.trackBar.Value; slider.Dispose(); return finalValue; } }