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
- CollectionConverter.cs
- WebBaseEventKeyComparer.cs
- HtmlAnchor.cs
- DateTimeOffset.cs
- EventSinkHelperWriter.cs
- ChannelParameterCollection.cs
- TableDetailsRow.cs
- xdrvalidator.cs
- WebPartDescriptionCollection.cs
- ServiceMemoryGates.cs
- TemplatedWizardStep.cs
- ImageAnimator.cs
- ProviderConnectionPoint.cs
- BaseParaClient.cs
- BitmapVisualManager.cs
- StateDesigner.Layouts.cs
- StringKeyFrameCollection.cs
- BindingsCollection.cs
- FindSimilarActivitiesVerb.cs
- ScriptingProfileServiceSection.cs
- BitmapEffectGroup.cs
- XamlSerializerUtil.cs
- DataFormat.cs
- ToolZone.cs
- Light.cs
- PasswordDeriveBytes.cs
- TextBoxBase.cs
- EncryptedPackageFilter.cs
- SubMenuStyle.cs
- EntityProviderServices.cs
- CodeAttributeArgument.cs
- Region.cs
- ListViewCommandEventArgs.cs
- TextDecorationCollection.cs
- ConfigXmlSignificantWhitespace.cs
- DataRowComparer.cs
- AstTree.cs
- EventLogPermissionEntry.cs
- SizeFConverter.cs
- TreeViewImageKeyConverter.cs
- QueueException.cs
- FakeModelItemImpl.cs
- IODescriptionAttribute.cs
- MasterPageBuildProvider.cs
- DtrList.cs
- MimeXmlReflector.cs
- SystemUnicastIPAddressInformation.cs
- HandlerFactoryWrapper.cs
- Substitution.cs
- DesignTimeTemplateParser.cs
- WebPartMenu.cs
- ListView.cs
- TextServicesDisplayAttribute.cs
- StartUpEventArgs.cs
- ElementProxy.cs
- DataGridViewToolTip.cs
- CompilerGeneratedAttribute.cs
- SignedXml.cs
- ReceiveMessageAndVerifySecurityAsyncResultBase.cs
- TextStore.cs
- GenerateTemporaryAssemblyTask.cs
- BindingContext.cs
- ScrollItemProviderWrapper.cs
- ScrollBarAutomationPeer.cs
- ByteAnimationUsingKeyFrames.cs
- TabItem.cs
- ICollection.cs
- XamlToRtfWriter.cs
- WebPartDisplayModeCancelEventArgs.cs
- Trace.cs
- XPathAncestorIterator.cs
- RemotingServices.cs
- XmlSchemaExternal.cs
- PixelFormatConverter.cs
- TextRangeProviderWrapper.cs
- SchemaEntity.cs
- ParserContext.cs
- UniqueEventHelper.cs
- RemotingServices.cs
- SHA1CryptoServiceProvider.cs
- XmlSchemaAnnotation.cs
- MouseCaptureWithinProperty.cs
- EnumBuilder.cs
- HttpCachePolicyElement.cs
- CellNormalizer.cs
- SystemWebExtensionsSectionGroup.cs
- CodeCatchClause.cs
- OperationResponse.cs
- OutputScope.cs
- bindurihelper.cs
- ClientRoleProvider.cs
- SkewTransform.cs
- Lease.cs
- SourceLocationProvider.cs
- RtType.cs
- DataView.cs
- TargetControlTypeAttribute.cs
- ResourceReader.cs
- WebPartCloseVerb.cs
- HttpModulesSection.cs