Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / whidbey / netfxsp / ndp / fx / src / WinForms / Managed / System / WinForms / PropertyGridInternal / ImmutablePropertyDescriptorGridEntry.cs / 1 / 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
- WebBrowserPermission.cs
- WsrmFault.cs
- PnrpPermission.cs
- AsyncCompletedEventArgs.cs
- TextTreeUndo.cs
- ToolboxItemFilterAttribute.cs
- Win32.cs
- mda.cs
- WorkflowInstanceProvider.cs
- AddingNewEventArgs.cs
- OracleBoolean.cs
- AddToCollection.cs
- DateTimeOffset.cs
- AssemblyBuilder.cs
- SerializationFieldInfo.cs
- Mappings.cs
- InternalConfigRoot.cs
- RouteValueExpressionBuilder.cs
- ResourcePropertyMemberCodeDomSerializer.cs
- GridViewCellAutomationPeer.cs
- WebBrowserNavigatedEventHandler.cs
- EventLogSession.cs
- DrawingVisualDrawingContext.cs
- SqlDataSourceStatusEventArgs.cs
- DocumentPageView.cs
- serverconfig.cs
- KnownTypeDataContractResolver.cs
- ImageMetadata.cs
- InheritanceAttribute.cs
- DataTemplateSelector.cs
- FixedSOMTable.cs
- RelationshipWrapper.cs
- ExtensibleClassFactory.cs
- DataColumnCollection.cs
- PreviewPrintController.cs
- TextSelectionHelper.cs
- DataDocumentXPathNavigator.cs
- BlockUIContainer.cs
- FormatterServicesNoSerializableCheck.cs
- PageTheme.cs
- SurrogateDataContract.cs
- SafeThemeHandle.cs
- QilBinary.cs
- AggregateException.cs
- UdpChannelFactory.cs
- XmlWellformedWriter.cs
- BitHelper.cs
- ItemCheckedEvent.cs
- LicenseException.cs
- GeometryCombineModeValidation.cs
- SimpleRecyclingCache.cs
- OracleInfoMessageEventArgs.cs
- InterleavedZipPartStream.cs
- SqlNotificationEventArgs.cs
- EncodingDataItem.cs
- CharStorage.cs
- BitmapCodecInfo.cs
- SocketPermission.cs
- TemplatedAdorner.cs
- InkCollectionBehavior.cs
- ScrollableControl.cs
- SqlMethodCallConverter.cs
- ReferenceConverter.cs
- PropertyMapper.cs
- RequestQueue.cs
- ConfigurationPropertyAttribute.cs
- Point3DConverter.cs
- SoapIgnoreAttribute.cs
- assertwrapper.cs
- DecryptedHeader.cs
- RangeValueProviderWrapper.cs
- DiagnosticTrace.cs
- StylusCaptureWithinProperty.cs
- IntranetCredentialPolicy.cs
- AssemblyBuilder.cs
- URLMembershipCondition.cs
- QuaternionAnimation.cs
- ping.cs
- LayoutEngine.cs
- Overlapped.cs
- FileSystemInfo.cs
- HwndHostAutomationPeer.cs
- TraceUtils.cs
- HMACSHA1.cs
- InitiatorServiceModelSecurityTokenRequirement.cs
- TrackingQuery.cs
- TemplatedMailWebEventProvider.cs
- NativeMethods.cs
- QuotedStringWriteStateInfo.cs
- EventMappingSettings.cs
- AlignmentYValidation.cs
- PolygonHotSpot.cs
- EncryptedReference.cs
- UserControlParser.cs
- Propagator.JoinPropagator.cs
- Directory.cs
- GregorianCalendar.cs
- SmiGettersStream.cs
- PointAnimationUsingKeyFrames.cs
- StorageEntityContainerMapping.cs