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
- ColumnResult.cs
- SqlMetaData.cs
- LiteralSubsegment.cs
- NamespaceDisplay.xaml.cs
- CrossSiteScriptingValidation.cs
- AppDomainFactory.cs
- ListItemsPage.cs
- InternalsVisibleToAttribute.cs
- DESCryptoServiceProvider.cs
- RegexInterpreter.cs
- DataGridViewColumnEventArgs.cs
- NetTcpSectionData.cs
- StringBuilder.cs
- XmlSchemaAnnotated.cs
- OdbcParameterCollection.cs
- EntityDataSourceWizardForm.cs
- SplitterCancelEvent.cs
- ArgIterator.cs
- TemplateInstanceAttribute.cs
- Memoizer.cs
- ChannelCacheSettings.cs
- Int32RectConverter.cs
- PrimarySelectionAdorner.cs
- CommonObjectSecurity.cs
- MeshGeometry3D.cs
- TextBoxBase.cs
- BitmapPalette.cs
- VideoDrawing.cs
- compensatingcollection.cs
- CustomGrammar.cs
- Assert.cs
- Instrumentation.cs
- ProcessHostFactoryHelper.cs
- DependencyProperty.cs
- StorageScalarPropertyMapping.cs
- DataPagerField.cs
- MimeMultiPart.cs
- InstalledFontCollection.cs
- XpsFontSubsetter.cs
- MultipleViewProviderWrapper.cs
- ApplicationActivator.cs
- ApplicationManager.cs
- ProgressBar.cs
- XhtmlStyleClass.cs
- ConfigurationStrings.cs
- UserMapPath.cs
- AccessorTable.cs
- Attributes.cs
- ReachFixedDocumentSerializerAsync.cs
- SettingsAttributeDictionary.cs
- StorageRoot.cs
- TagPrefixCollection.cs
- XmlSchemaInfo.cs
- XmlTypeAttribute.cs
- xml.cs
- SystemGatewayIPAddressInformation.cs
- CompositeCollection.cs
- NameNode.cs
- SoapReflectionImporter.cs
- Component.cs
- BooleanToVisibilityConverter.cs
- ThreadPool.cs
- HttpPostedFile.cs
- RootBrowserWindowAutomationPeer.cs
- DataGridPagerStyle.cs
- UserPersonalizationStateInfo.cs
- CommandBindingCollection.cs
- StylusShape.cs
- DependencySource.cs
- DynamicResourceExtensionConverter.cs
- EventDescriptor.cs
- DataGridPagerStyle.cs
- PeerNameRecordCollection.cs
- TypeSystem.cs
- XNameConverter.cs
- Stylus.cs
- ToolStripOverflow.cs
- Misc.cs
- DBConnection.cs
- ServiceInstallComponent.cs
- OracleDataReader.cs
- UnitControl.cs
- BinaryKeyIdentifierClause.cs
- ProjectionPath.cs
- DeviceFilterDictionary.cs
- UpDownEvent.cs
- ExpressionBinding.cs
- ConfigurationValue.cs
- RenderingEventArgs.cs
- NavigationEventArgs.cs
- UpdatePanelControlTrigger.cs
- CursorConverter.cs
- SevenBitStream.cs
- TypeUtil.cs
- BamlBinaryWriter.cs
- TextBoxView.cs
- MarkupWriter.cs
- StatusBarItemAutomationPeer.cs
- TypeDefinition.cs
- KnownBoxes.cs