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
- WebConfigurationHostFileChange.cs
- Drawing.cs
- MdImport.cs
- CreateUserErrorEventArgs.cs
- Expr.cs
- CheckPair.cs
- FieldDescriptor.cs
- EntityClientCacheKey.cs
- WebControlsSection.cs
- MimeFormImporter.cs
- SqlMetaData.cs
- CodeTypeReference.cs
- AutomationElementCollection.cs
- PackagePart.cs
- SystemFonts.cs
- InternalUserCancelledException.cs
- SmtpNetworkElement.cs
- SettingsProperty.cs
- ToolStripItemEventArgs.cs
- ButtonFlatAdapter.cs
- ValueTypeFixupInfo.cs
- TreeNodeStyle.cs
- Vector3dCollection.cs
- Constants.cs
- Selection.cs
- Size.cs
- ListViewTableCell.cs
- SafeTokenHandle.cs
- Type.cs
- HttpCookiesSection.cs
- TCEAdapterGenerator.cs
- PackageRelationship.cs
- ControlBuilder.cs
- NameNode.cs
- ObjectDataSourceStatusEventArgs.cs
- ObjRef.cs
- PackagingUtilities.cs
- PackWebRequestFactory.cs
- PartialCachingAttribute.cs
- LayoutTable.cs
- CngKeyBlobFormat.cs
- Oid.cs
- NameValueCollection.cs
- RegionIterator.cs
- DbDataSourceEnumerator.cs
- AffineTransform3D.cs
- ByeMessage11.cs
- RSACryptoServiceProvider.cs
- HostingEnvironmentException.cs
- DeviceOverridableAttribute.cs
- SrgsGrammar.cs
- HtmlString.cs
- Point3D.cs
- Bitmap.cs
- XmlSchemaType.cs
- DispatcherProcessingDisabled.cs
- ShaderEffect.cs
- ExpressionLexer.cs
- UserControlBuildProvider.cs
- Accessors.cs
- WindowsListViewSubItem.cs
- Relationship.cs
- CaseInsensitiveHashCodeProvider.cs
- DataGridRowDetailsEventArgs.cs
- XPathException.cs
- SecurityRuntime.cs
- ActiveXMessageFormatter.cs
- EllipticalNodeOperations.cs
- EmbeddedObject.cs
- OAVariantLib.cs
- XmlRawWriter.cs
- ICspAsymmetricAlgorithm.cs
- ToolStripLocationCancelEventArgs.cs
- SqlConnectionManager.cs
- DictionaryManager.cs
- ADMembershipProvider.cs
- ForeignKeyConstraint.cs
- InternalMappingException.cs
- CodeAttachEventStatement.cs
- Vector3DAnimationBase.cs
- AnnotationAuthorChangedEventArgs.cs
- SmtpNtlmAuthenticationModule.cs
- SemanticBasicElement.cs
- GlobalEventManager.cs
- CompilerGlobalScopeAttribute.cs
- TextClipboardData.cs
- XmlExtensionFunction.cs
- XmlTextAttribute.cs
- XmlSchemaObjectTable.cs
- InvalidOperationException.cs
- GeneratedContractType.cs
- indexingfiltermarshaler.cs
- WorkflowInstanceAbortedRecord.cs
- SqlTypeConverter.cs
- RunClient.cs
- InternalCache.cs
- WebControlsSection.cs
- DocumentEventArgs.cs
- MimeObjectFactory.cs
- AuthenticationService.cs