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
- SerializationInfo.cs
- FacetValueContainer.cs
- OciEnlistContext.cs
- WindowsSlider.cs
- _Win32.cs
- PenCursorManager.cs
- ByteFacetDescriptionElement.cs
- Empty.cs
- ScrollBarRenderer.cs
- DeferredSelectedIndexReference.cs
- LayoutSettings.cs
- HitTestDrawingContextWalker.cs
- ModelServiceImpl.cs
- DataGridHeaderBorder.cs
- PerformanceCounterLib.cs
- PageContent.cs
- TypeDescriptor.cs
- BatchWriter.cs
- MappedMetaModel.cs
- BaseProcessor.cs
- KeyedQueue.cs
- ToolStripSplitStackLayout.cs
- Line.cs
- _LocalDataStore.cs
- EmptyElement.cs
- SqlBulkCopyColumnMapping.cs
- RoleService.cs
- FileAccessException.cs
- COM2ExtendedBrowsingHandler.cs
- _FtpControlStream.cs
- SqlReferenceCollection.cs
- SystemInfo.cs
- ResponseStream.cs
- NonParentingControl.cs
- WebPartEditorApplyVerb.cs
- TableHeaderCell.cs
- CommentAction.cs
- TaskHelper.cs
- CodeDOMUtility.cs
- DebuggerAttributes.cs
- Table.cs
- ProtocolElementCollection.cs
- TableStyle.cs
- UnmanagedHandle.cs
- MaskInputRejectedEventArgs.cs
- TextControl.cs
- MulticastNotSupportedException.cs
- NavigationEventArgs.cs
- FolderLevelBuildProvider.cs
- TextControlDesigner.cs
- EdgeProfileValidation.cs
- LogFlushAsyncResult.cs
- CommandHelper.cs
- XPathAncestorQuery.cs
- InvalidCastException.cs
- Debug.cs
- SpellerInterop.cs
- XPathItem.cs
- SQLMembershipProvider.cs
- Solver.cs
- ImageMetadata.cs
- TableItemStyle.cs
- safelinkcollection.cs
- TreeBuilder.cs
- InlinedLocationReference.cs
- FontCacheLogic.cs
- FontSource.cs
- SerializationFieldInfo.cs
- DataSourceView.cs
- DataGridViewCellPaintingEventArgs.cs
- Int64KeyFrameCollection.cs
- TextBreakpoint.cs
- CodeCompiler.cs
- SystemNetworkInterface.cs
- GraphicsState.cs
- HttpListenerException.cs
- SqlProviderServices.cs
- WorkerRequest.cs
- TextAutomationPeer.cs
- KeyGesture.cs
- SafeSerializationManager.cs
- TransformationRules.cs
- BamlRecords.cs
- DbProviderFactoriesConfigurationHandler.cs
- LineProperties.cs
- ToolBarPanel.cs
- Decoder.cs
- Int64Storage.cs
- SplitterCancelEvent.cs
- DataViewManager.cs
- ApplicationInfo.cs
- sqlmetadatafactory.cs
- ConstraintStruct.cs
- VariantWrapper.cs
- PointLightBase.cs
- SqlCrossApplyToCrossJoin.cs
- GeneralTransform3D.cs
- GeneralTransformGroup.cs
- SortDescriptionCollection.cs
- ActivationArguments.cs