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
- ListControl.cs
- DoubleAnimationClockResource.cs
- AndMessageFilterTable.cs
- ContextMenuService.cs
- TheQuery.cs
- SqlBulkCopyColumnMappingCollection.cs
- PeerToPeerException.cs
- InputLanguageCollection.cs
- MetadataSection.cs
- TrustSection.cs
- X509Extension.cs
- TagNameToTypeMapper.cs
- Tuple.cs
- SHA384.cs
- HttpInputStream.cs
- Operator.cs
- HttpListenerException.cs
- ExtenderControl.cs
- ManipulationStartingEventArgs.cs
- UnsafeNativeMethodsMilCoreApi.cs
- COSERVERINFO.cs
- EntityAdapter.cs
- ThreadPool.cs
- Publisher.cs
- TerminatorSinks.cs
- ComponentSerializationService.cs
- ScrollItemPattern.cs
- TreeNodeStyle.cs
- TraceHelpers.cs
- CombinedGeometry.cs
- DataGridViewBand.cs
- OperationAbortedException.cs
- SHA256Cng.cs
- TemplateContent.cs
- Stack.cs
- StringSource.cs
- ClientScriptItem.cs
- Point.cs
- JournalEntry.cs
- SerialReceived.cs
- CodeDefaultValueExpression.cs
- CheckBoxRenderer.cs
- ChildrenQuery.cs
- ToolStripPanelSelectionBehavior.cs
- ClientUrlResolverWrapper.cs
- StandardBindingImporter.cs
- ISessionStateStore.cs
- XmlSchemaSequence.cs
- ToolStripDropDownItemDesigner.cs
- Rotation3D.cs
- SettingsProperty.cs
- TargetInvocationException.cs
- SystemIcons.cs
- ToolboxBitmapAttribute.cs
- ElementAction.cs
- ColorDialog.cs
- SpecialTypeDataContract.cs
- ColorAnimation.cs
- BindingExpression.cs
- EpmSyndicationContentSerializer.cs
- TableCell.cs
- StatusBarItem.cs
- InputReportEventArgs.cs
- Rect3D.cs
- securestring.cs
- RsaSecurityTokenParameters.cs
- PngBitmapDecoder.cs
- SelfIssuedAuthRSACryptoProvider.cs
- BaseDataBoundControl.cs
- XMLDiffLoader.cs
- SendSecurityHeaderElementContainer.cs
- UIElementAutomationPeer.cs
- ExpressionBuilder.cs
- NativeMethods.cs
- _SslStream.cs
- ISAPIApplicationHost.cs
- AssertSection.cs
- WindowsEditBoxRange.cs
- BookmarkScopeInfo.cs
- TextContainerChangeEventArgs.cs
- panel.cs
- ConfigurationElement.cs
- Oci.cs
- LinkClickEvent.cs
- Privilege.cs
- ProcessHostMapPath.cs
- Hash.cs
- WinEventTracker.cs
- CompilerInfo.cs
- MessageBox.cs
- SpeakCompletedEventArgs.cs
- BaseTemplateCodeDomTreeGenerator.cs
- XmlEventCache.cs
- DiscoveryClientDuplexChannel.cs
- XPathNavigator.cs
- HelpHtmlBuilder.cs
- VoiceInfo.cs
- Window.cs
- DrawItemEvent.cs
- ProcessInfo.cs