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
- TextFormatter.cs
- NativeMethods.cs
- CompositeKey.cs
- EventMappingSettings.cs
- Button.cs
- ObjectView.cs
- UserInitiatedNavigationPermission.cs
- ProfileParameter.cs
- WebDisplayNameAttribute.cs
- BitmapCacheBrush.cs
- CellRelation.cs
- SyntaxCheck.cs
- AxHost.cs
- WindowsTitleBar.cs
- AstNode.cs
- Vector3DAnimation.cs
- PropertyRecord.cs
- IPGlobalProperties.cs
- SQLBytesStorage.cs
- CodeArgumentReferenceExpression.cs
- HttpClientProtocol.cs
- XPathNavigator.cs
- Application.cs
- XhtmlBasicImageAdapter.cs
- TTSEngineTypes.cs
- ProgressChangedEventArgs.cs
- TextContainerChangedEventArgs.cs
- DocumentApplicationDocumentViewer.cs
- DiscoveryClientRequestChannel.cs
- DataService.cs
- AssociationSetMetadata.cs
- OletxTransactionManager.cs
- METAHEADER.cs
- DataColumn.cs
- _ReceiveMessageOverlappedAsyncResult.cs
- Configuration.cs
- DbConnectionPoolIdentity.cs
- FixedSOMLineRanges.cs
- cookieexception.cs
- WrapPanel.cs
- NavigationService.cs
- ObjectHandle.cs
- MetadataArtifactLoaderXmlReaderWrapper.cs
- DelegatingTypeDescriptionProvider.cs
- DiscoveryEndpointValidator.cs
- BitmapDownload.cs
- CallbackHandler.cs
- MembershipSection.cs
- HttpWebResponse.cs
- RegionData.cs
- WindowsListViewItem.cs
- WebPartTransformerCollection.cs
- RoutingEndpointTrait.cs
- querybuilder.cs
- DependencyObject.cs
- BaseCollection.cs
- InvokePattern.cs
- MailWriter.cs
- BmpBitmapDecoder.cs
- ComponentEditorPage.cs
- AssemblyBuilder.cs
- XmlILModule.cs
- StringKeyFrameCollection.cs
- GenericRootAutomationPeer.cs
- QueryOperatorEnumerator.cs
- TemplatedMailWebEventProvider.cs
- MenuStrip.cs
- ChannelPool.cs
- PartEditor.cs
- UIElementPropertyUndoUnit.cs
- CngProperty.cs
- InternalEnumValidatorAttribute.cs
- OneOf.cs
- ImageMetadata.cs
- FixedStringLookup.cs
- TypeBuilderInstantiation.cs
- NumericUpDown.cs
- TableLayoutPanel.cs
- Trace.cs
- ExpressionCopier.cs
- InstanceDataCollectionCollection.cs
- ProvideValueServiceProvider.cs
- DataGridViewComponentPropertyGridSite.cs
- NetworkInformationPermission.cs
- PenContext.cs
- ArgumentOutOfRangeException.cs
- SqlDataAdapter.cs
- PageStatePersister.cs
- TextServicesContext.cs
- BitmapFrameEncode.cs
- ServiceContractGenerator.cs
- ProvideValueServiceProvider.cs
- SessionPageStatePersister.cs
- URL.cs
- DbConnectionPoolIdentity.cs
- DataServiceException.cs
- RefreshPropertiesAttribute.cs
- OpenTypeLayoutCache.cs
- JournalEntryListConverter.cs
- Predicate.cs