public override object EditValue(ITypeDescriptorContext typeDescriptorContext, IServiceProvider serviceProvider, object value) { if (typeDescriptorContext == null) throw new ArgumentNullException("typeDescriptorContext"); if (serviceProvider == null) throw new ArgumentNullException("serviceProvider"); object returnVal = value; this.editorService = (IWindowsFormsEditorService)serviceProvider.GetService(typeof(IWindowsFormsEditorService)); if (editorService != null) { ITypeFilterProvider typeFilterProvider = null; TypeFilterProviderAttribute typeFilterProvAttr = null; if (typeDescriptorContext.PropertyDescriptor != null && typeDescriptorContext.PropertyDescriptor.Attributes != null) typeFilterProvAttr = typeDescriptorContext.PropertyDescriptor.Attributes[typeof(TypeFilterProviderAttribute)] as TypeFilterProviderAttribute; if (typeFilterProvAttr != null) { ITypeProvider typeProvider = serviceProvider.GetService(typeof(ITypeProvider)) as ITypeProvider; if (typeProvider == null) throw new Exception(SR.GetString(SR.General_MissingService, typeof(ITypeProvider).FullName)); Type typeFilterProviderType = Type.GetType(typeFilterProvAttr.TypeFilterProviderTypeName); //typeProvider.GetType(typeFilterProvAttr.TypeFilterProviderTypeName); if (typeFilterProviderType != null) typeFilterProvider = Activator.CreateInstance(typeFilterProviderType, new object[] { serviceProvider }) as ITypeFilterProvider; } if (typeFilterProvider == null) typeFilterProvider = ((typeDescriptorContext.Instance is object[]) ? ((object[])typeDescriptorContext.Instance)[0] : typeDescriptorContext.Instance) as ITypeFilterProvider; if (typeFilterProvider == null) typeFilterProvider = value as ITypeFilterProvider; if (typeFilterProvider == null) { IReferenceService rs = serviceProvider.GetService(typeof(IReferenceService)) as IReferenceService; if (rs != null) { IComponent baseComponent = rs.GetComponent(typeDescriptorContext.Instance); if (baseComponent is ITypeFilterProvider) typeFilterProvider = baseComponent as ITypeFilterProvider; } } if (typeFilterProvider == null) { typeFilterProvider = typeDescriptorContext.PropertyDescriptor as ITypeFilterProvider; } string oldTypeName = value as string; if (value != null && typeDescriptorContext.PropertyDescriptor.PropertyType != typeof(string) && typeDescriptorContext.PropertyDescriptor.Converter != null && typeDescriptorContext.PropertyDescriptor.Converter.CanConvertTo(typeof(string))) oldTypeName = typeDescriptorContext.PropertyDescriptor.Converter.ConvertTo(typeDescriptorContext, CultureInfo.CurrentCulture, value, typeof(string)) as string; using (TypeBrowserDialog dlg = new TypeBrowserDialog(serviceProvider, typeFilterProvider as ITypeFilterProvider, oldTypeName)) { if (DialogResult.OK == editorService.ShowDialog(dlg)) { if (typeDescriptorContext.PropertyDescriptor.PropertyType == typeof(Type)) returnVal = dlg.SelectedType; else if (typeDescriptorContext.PropertyDescriptor.PropertyType == typeof(string)) returnVal = dlg.SelectedType.FullName; else if (typeDescriptorContext.PropertyDescriptor.Converter != null && typeDescriptorContext.PropertyDescriptor.Converter.CanConvertFrom(typeDescriptorContext, typeof(string))) returnVal = typeDescriptorContext.PropertyDescriptor.Converter.ConvertFrom(typeDescriptorContext, CultureInfo.CurrentCulture, dlg.SelectedType.FullName); } } } return returnVal; }
private void BrowseAndSelectType(DataGridViewCell currentCell) { bool doneSelectingType = false; while (!doneSelectingType) { using (TypeBrowserDialog typeBrowserDialog = new TypeBrowserDialog( this.ServiceProvider as IServiceProvider, new ParameterTypeFilterProvider(), "System.String")) { doneSelectingType = TrySelectType(typeBrowserDialog, currentCell); } } }
bool TrySelectType(TypeBrowserDialog typeBrowserDialog, DataGridViewCell cell) { typeBrowserDialog.ShowDialog(); if (typeBrowserDialog.SelectedType != null) { if (!ParameterTypeFilterProvider.IsValidType(typeBrowserDialog.SelectedType)) { DesignerHelpers.ShowMessage(this.ServiceProvider, SR2.GetString(SR2.InvalidParameterType, typeBrowserDialog.SelectedType), DR.GetString(DR.WorkflowDesignerTitle), MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1); return false; } AddToTypeList(typeBrowserDialog.SelectedType); } typeChooserCellItem.ChosenType = typeBrowserDialog.SelectedType; cell.Value = typeBrowserDialog.SelectedType; return true; }
void ImportContractButtonClicked(object sender, EventArgs e) { using (TypeBrowserDialog typeBrowserDialog = new TypeBrowserDialog(serviceProvider as IServiceProvider, new ServiceContractsTypeFilterProvider(), "System.String")) { typeBrowserDialog.ShowDialog(); if (typeBrowserDialog.SelectedType != null) { ServiceContractListItem contractItem = new ServiceContractListItem(this.operationsListBox); contractItem.Validating += new CancelEventHandler(ServiceContractValidating); contractItem.Name = typeBrowserDialog.SelectedType.FullName; contractItem.ContractType = typeBrowserDialog.SelectedType; contractItem.IsCustomContract = false; CancelEventArgs cancelEventArgs = new CancelEventArgs(); contractItem.Validating.Invoke(contractItem, cancelEventArgs); if (cancelEventArgs.Cancel) { return; } AddServiceContract(contractItem); ImportContract(typeBrowserDialog.SelectedType); } } }