Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / WinForms / Managed / System / WinForms / PropertyGridInternal / ImmutablePropertyDescriptorGridEntry.cs / 1305376 / ImmutablePropertyDescriptorGridEntry.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- /* */ namespace System.Windows.Forms.PropertyGridInternal { using System.Runtime.Serialization.Formatters; using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using System; using System.Collections; using System.Reflection; using System.ComponentModel; using System.ComponentModel.Design; using System.Windows.Forms; using System.Windows.Forms.Design; using System.Drawing; using System.Drawing.Design; using Microsoft.Win32; // This grid entry is used for immutable objects. An immutable object is identified // through it's TypeConverter, which returns TRUE to ShouldCreateInstance. For this case, // we never go through the property descriptor to change the value, but recreate each // time. // internal class ImmutablePropertyDescriptorGridEntry : PropertyDescriptorGridEntry { internal ImmutablePropertyDescriptorGridEntry(PropertyGrid ownerGrid, GridEntry peParent, PropertyDescriptor propInfo, bool hide) : base(ownerGrid, peParent, propInfo, hide) { } protected override bool IsPropertyReadOnly { get { return ShouldRenderReadOnly; } } public override object PropertyValue { get { return base.PropertyValue; } [SuppressMessage("Microsoft.Security", "CA2102:CatchNonClsCompliantExceptionsInGeneralHandlers")] set { // Create a new instance of the value and set it into the parent grid entry. // object owner = GetValueOwner(); GridEntry parentEntry = InstanceParentGridEntry; TypeConverter parentConverter = parentEntry.TypeConverter; PropertyDescriptorCollection props = parentConverter.GetProperties(parentEntry, owner); IDictionary values = new Hashtable(props.Count); object newObject = null; for (int i = 0; i < props.Count; i++) { if (propertyInfo.Name != null && propertyInfo.Name.Equals(props[i].Name)) { values[props[i].Name] = value; } else { values[props[i].Name] = props[i].GetValue(owner); } } try { newObject = parentConverter.CreateInstance(parentEntry, values); } catch (Exception e) { if (string.IsNullOrEmpty(e.Message)) { throw new TargetInvocationException(SR.GetString(SR.ExceptionCreatingObject, InstanceParentGridEntry.PropertyType.FullName, e.ToString()), e); } else throw; // rethrow the same exception } if (newObject != null) { parentEntry.PropertyValue = newObject; } } } internal override bool NotifyValueGivenParent(object obj, int type) { return ParentGridEntry.NotifyValue(type); } public override bool ShouldRenderReadOnly { get { return InstanceParentGridEntry.ShouldRenderReadOnly; } } private GridEntry InstanceParentGridEntry { get { GridEntry parent = this.ParentGridEntry; if (parent is CategoryGridEntry) { parent = parent.ParentGridEntry; } return parent; } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- /* */ namespace System.Windows.Forms.PropertyGridInternal { using System.Runtime.Serialization.Formatters; using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using System; using System.Collections; using System.Reflection; using System.ComponentModel; using System.ComponentModel.Design; using System.Windows.Forms; using System.Windows.Forms.Design; using System.Drawing; using System.Drawing.Design; using Microsoft.Win32; // This grid entry is used for immutable objects. An immutable object is identified // through it's TypeConverter, which returns TRUE to ShouldCreateInstance. For this case, // we never go through the property descriptor to change the value, but recreate each // time. // internal class ImmutablePropertyDescriptorGridEntry : PropertyDescriptorGridEntry { internal ImmutablePropertyDescriptorGridEntry(PropertyGrid ownerGrid, GridEntry peParent, PropertyDescriptor propInfo, bool hide) : base(ownerGrid, peParent, propInfo, hide) { } protected override bool IsPropertyReadOnly { get { return ShouldRenderReadOnly; } } public override object PropertyValue { get { return base.PropertyValue; } [SuppressMessage("Microsoft.Security", "CA2102:CatchNonClsCompliantExceptionsInGeneralHandlers")] set { // Create a new instance of the value and set it into the parent grid entry. // object owner = GetValueOwner(); GridEntry parentEntry = InstanceParentGridEntry; TypeConverter parentConverter = parentEntry.TypeConverter; PropertyDescriptorCollection props = parentConverter.GetProperties(parentEntry, owner); IDictionary values = new Hashtable(props.Count); object newObject = null; for (int i = 0; i < props.Count; i++) { if (propertyInfo.Name != null && propertyInfo.Name.Equals(props[i].Name)) { values[props[i].Name] = value; } else { values[props[i].Name] = props[i].GetValue(owner); } } try { newObject = parentConverter.CreateInstance(parentEntry, values); } catch (Exception e) { if (string.IsNullOrEmpty(e.Message)) { throw new TargetInvocationException(SR.GetString(SR.ExceptionCreatingObject, InstanceParentGridEntry.PropertyType.FullName, e.ToString()), e); } else throw; // rethrow the same exception } if (newObject != null) { parentEntry.PropertyValue = newObject; } } } internal override bool NotifyValueGivenParent(object obj, int type) { return ParentGridEntry.NotifyValue(type); } public override bool ShouldRenderReadOnly { get { return InstanceParentGridEntry.ShouldRenderReadOnly; } } private GridEntry InstanceParentGridEntry { get { GridEntry parent = this.ParentGridEntry; if (parent is CategoryGridEntry) { parent = parent.ParentGridEntry; } return parent; } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- WebPartZoneCollection.cs
- PathGeometry.cs
- MetabaseServerConfig.cs
- GridViewDeletedEventArgs.cs
- ExtendedPropertyCollection.cs
- ServiceDescriptionReflector.cs
- FormViewModeEventArgs.cs
- AstTree.cs
- XsdBuilder.cs
- TracedNativeMethods.cs
- RoleService.cs
- SessionEndedEventArgs.cs
- FillErrorEventArgs.cs
- ForwardPositionQuery.cs
- Decorator.cs
- ColumnMap.cs
- SelectedDatesCollection.cs
- ImageConverter.cs
- Point.cs
- ProcessInfo.cs
- NegotiateStream.cs
- CachingHintValidation.cs
- SettingsAttributeDictionary.cs
- WorkflowDataContext.cs
- OptimizedTemplateContentHelper.cs
- FilterElement.cs
- AutoGeneratedFieldProperties.cs
- ClientApiGenerator.cs
- XmlSchemaSimpleTypeList.cs
- ZipFileInfo.cs
- ConfigurationSectionCollection.cs
- XPathNodeList.cs
- GridViewUpdatedEventArgs.cs
- BamlRecordReader.cs
- GradientStopCollection.cs
- DataGridViewColumn.cs
- VSDExceptions.cs
- SQlBooleanStorage.cs
- FlowDocument.cs
- PrivateUnsafeNativeCompoundFileMethods.cs
- BooleanAnimationUsingKeyFrames.cs
- DomainUpDown.cs
- Utilities.cs
- PersonalizationState.cs
- XmlChoiceIdentifierAttribute.cs
- ProjectionCamera.cs
- GridViewUpdateEventArgs.cs
- D3DImage.cs
- EventPrivateKey.cs
- EntityDataSourceDataSelectionPanel.designer.cs
- BindingsCollection.cs
- Touch.cs
- LineVisual.cs
- DriveNotFoundException.cs
- FilePrompt.cs
- XmlSchemaCompilationSettings.cs
- LabelLiteral.cs
- XmlEntity.cs
- HostingEnvironmentSection.cs
- InvariantComparer.cs
- TextAdaptor.cs
- DeflateEmulationStream.cs
- ScrollChangedEventArgs.cs
- WebBrowserDesigner.cs
- LogWriteRestartAreaAsyncResult.cs
- Point.cs
- KeyedQueue.cs
- BatchParser.cs
- TransformerTypeCollection.cs
- ScriptingJsonSerializationSection.cs
- XmlWrappingWriter.cs
- ScaleTransform3D.cs
- ImageCodecInfo.cs
- DrawTreeNodeEventArgs.cs
- MessageSmuggler.cs
- AutoGeneratedField.cs
- Translator.cs
- xdrvalidator.cs
- TextModifier.cs
- MsmqDecodeHelper.cs
- cookiecollection.cs
- ACL.cs
- ReadWriteSpinLock.cs
- ServiceBehaviorAttribute.cs
- AuthenticatedStream.cs
- PathSegmentCollection.cs
- WebReferencesBuildProvider.cs
- WindowsToolbarAsMenu.cs
- SqlDataSourceSelectingEventArgs.cs
- BuilderElements.cs
- X509IssuerSerialKeyIdentifierClause.cs
- VisualCollection.cs
- CultureInfo.cs
- ToolZoneDesigner.cs
- DateBoldEvent.cs
- WebPartUtil.cs
- EventData.cs
- WebPartConnectionsCancelEventArgs.cs
- OutputCacheModule.cs
- RegistryKey.cs