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
- HttpGetProtocolReflector.cs
- CatalogZoneAutoFormat.cs
- ExcCanonicalXml.cs
- Trace.cs
- KnownAssemblyEntry.cs
- clipboard.cs
- PeerApplicationLaunchInfo.cs
- MiniAssembly.cs
- TextSelection.cs
- CustomLineCap.cs
- TextDecorationUnitValidation.cs
- DataViewSetting.cs
- TextMessageEncodingElement.cs
- DecoderFallbackWithFailureFlag.cs
- AnchoredBlock.cs
- ReadOnlyNameValueCollection.cs
- RowParagraph.cs
- ObjectComplexPropertyMapping.cs
- ValueTable.cs
- DefaultDiscoveryService.cs
- PolicyDesigner.cs
- ListViewItemSelectionChangedEvent.cs
- CDSCollectionETWBCLProvider.cs
- DataIdProcessor.cs
- TiffBitmapEncoder.cs
- sqlmetadatafactory.cs
- SqlColumnizer.cs
- FlowchartStart.xaml.cs
- AsyncStreamReader.cs
- MailWebEventProvider.cs
- UIElementAutomationPeer.cs
- NativeWrapper.cs
- MemberMaps.cs
- TableLayoutSettings.cs
- MultipleViewPattern.cs
- InputScopeAttribute.cs
- EntityContainerAssociationSetEnd.cs
- WindowsFormsHostPropertyMap.cs
- MarkupObject.cs
- DbProviderFactories.cs
- CodeIterationStatement.cs
- EditorZoneBase.cs
- CryptographicAttribute.cs
- Mutex.cs
- ExpressionHelper.cs
- SiteMap.cs
- RuntimeResourceSet.cs
- DurableTimerExtension.cs
- TransformValueSerializer.cs
- SortDescription.cs
- ThreadExceptionEvent.cs
- IPHostEntry.cs
- PagedDataSource.cs
- PeekCompletedEventArgs.cs
- DefaultHttpHandler.cs
- DescendantBaseQuery.cs
- BindingCollection.cs
- DrawingGroup.cs
- PackageDigitalSignature.cs
- UntrustedRecipientException.cs
- AllMembershipCondition.cs
- DataReceivedEventArgs.cs
- RepeaterCommandEventArgs.cs
- DefaultParameterValueAttribute.cs
- TransformedBitmap.cs
- GlyphsSerializer.cs
- AspNetSynchronizationContext.cs
- sqlnorm.cs
- RepeatBehavior.cs
- UrlMapping.cs
- shaper.cs
- SystemInfo.cs
- WithParamAction.cs
- DbConnectionPoolIdentity.cs
- QueryOperationResponseOfT.cs
- _ConnectionGroup.cs
- ValidationRuleCollection.cs
- ByteStream.cs
- FileDataSourceCache.cs
- NameValueConfigurationCollection.cs
- StoreUtilities.cs
- UrlPath.cs
- ToolStripPanelRenderEventArgs.cs
- DesignerActionListCollection.cs
- StorageMappingFragment.cs
- SapiInterop.cs
- InvalidPropValue.cs
- basevalidator.cs
- ToolboxComponentsCreatingEventArgs.cs
- __FastResourceComparer.cs
- XmlEncodedRawTextWriter.cs
- XmlStreamStore.cs
- Point3DCollection.cs
- SqlNodeTypeOperators.cs
- SqlCommandBuilder.cs
- InternalMappingException.cs
- StorageEndPropertyMapping.cs
- UnsafeNativeMethods.cs
- WithStatement.cs
- HttpCacheVaryByContentEncodings.cs