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
- TextureBrush.cs
- CodeGenerator.cs
- KeyedCollection.cs
- SafeReversePInvokeHandle.cs
- MiniModule.cs
- DataColumnCollection.cs
- TdsParserSafeHandles.cs
- Thumb.cs
- HttpListenerTimeoutManager.cs
- CodeVariableDeclarationStatement.cs
- SafeFileHandle.cs
- PageParser.cs
- datacache.cs
- IFlowDocumentViewer.cs
- InstanceOwnerException.cs
- ProtectedConfigurationSection.cs
- XmlEntityReference.cs
- StateMachineWorkflowDesigner.cs
- Root.cs
- UnauthorizedWebPart.cs
- SelectionPattern.cs
- MessageDecoder.cs
- Event.cs
- WebPartEditVerb.cs
- ReflectionUtil.cs
- XsdCachingReader.cs
- SiteMapNodeCollection.cs
- WindowInteropHelper.cs
- DomNameTable.cs
- XamlPoint3DCollectionSerializer.cs
- DataTemplateKey.cs
- SchemaElement.cs
- ObsoleteAttribute.cs
- OutputScope.cs
- HtmlInputButton.cs
- WebEvents.cs
- MessageQueuePermissionEntry.cs
- BaseDataList.cs
- CssTextWriter.cs
- AsyncStreamReader.cs
- RSAPKCS1KeyExchangeFormatter.cs
- PolyQuadraticBezierSegment.cs
- AttributeTableBuilder.cs
- ProcessManager.cs
- ContextItemManager.cs
- ToolStripDropDown.cs
- TextRenderingModeValidation.cs
- OletxEnlistment.cs
- DataGridViewColumnDesigner.cs
- ImplicitInputBrush.cs
- DataRecordObjectView.cs
- fixedPageContentExtractor.cs
- OdbcStatementHandle.cs
- ProfileSettingsCollection.cs
- StringSorter.cs
- DeferredElementTreeState.cs
- Operator.cs
- RightsManagementUser.cs
- MethodCallExpression.cs
- UdpDiscoveryMessageFilter.cs
- CompilerError.cs
- SqlUdtInfo.cs
- ReferenceEqualityComparer.cs
- FileDialog.cs
- ImmutableCollection.cs
- Registry.cs
- Double.cs
- PropertyGeneratedEventArgs.cs
- CompositionAdorner.cs
- Base64Stream.cs
- DataPagerFieldCollection.cs
- OutKeywords.cs
- ComponentManagerBroker.cs
- MouseWheelEventArgs.cs
- PropertyEmitterBase.cs
- EpmSyndicationContentSerializer.cs
- ProxySimple.cs
- OlePropertyStructs.cs
- DataGridViewTopLeftHeaderCell.cs
- HScrollProperties.cs
- StylusPlugInCollection.cs
- StreamReader.cs
- HttpListenerRequest.cs
- VerticalAlignConverter.cs
- OleStrCAMarshaler.cs
- StoragePropertyMapping.cs
- ControlTemplate.cs
- CatalogZone.cs
- MouseCaptureWithinProperty.cs
- LinqDataSourceUpdateEventArgs.cs
- ReadContentAsBinaryHelper.cs
- RemoteWebConfigurationHostServer.cs
- BamlResourceDeserializer.cs
- StylusEventArgs.cs
- DecimalConstantAttribute.cs
- RuleSetBrowserDialog.cs
- HttpListenerPrefixCollection.cs
- ListControlActionList.cs
- CodeCompiler.cs
- HtmlLabelAdapter.cs