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
- NumberFunctions.cs
- DataGridViewRowPrePaintEventArgs.cs
- MouseEvent.cs
- SeekStoryboard.cs
- QilScopedVisitor.cs
- DragCompletedEventArgs.cs
- SqlExpander.cs
- ProtocolElementCollection.cs
- Nullable.cs
- InfoCardBaseException.cs
- DataStorage.cs
- DataGridViewCellContextMenuStripNeededEventArgs.cs
- CharEnumerator.cs
- RelationshipEnd.cs
- Validator.cs
- RadioButtonList.cs
- FieldToken.cs
- XmlSortKey.cs
- MarshalDirectiveException.cs
- DesignColumn.cs
- XmlObjectSerializerContext.cs
- WebPartRestoreVerb.cs
- ObjectDataSourceDisposingEventArgs.cs
- XmlnsDictionary.cs
- XsltQilFactory.cs
- compensatingcollection.cs
- ConnectorMovedEventArgs.cs
- XmlNodeReader.cs
- PerformanceCounterPermissionAttribute.cs
- SaveFileDialog.cs
- ComPlusContractBehavior.cs
- XsltCompileContext.cs
- _DigestClient.cs
- ProtocolsSection.cs
- TemplatePartAttribute.cs
- DataControlFieldCollection.cs
- CancellationTokenRegistration.cs
- CacheVirtualItemsEvent.cs
- WebMessageBodyStyleHelper.cs
- RTLAwareMessageBox.cs
- And.cs
- ShaperBuffers.cs
- InheritanceAttribute.cs
- Serializer.cs
- FixedTextBuilder.cs
- PropertyItem.cs
- ChangeInterceptorAttribute.cs
- Grant.cs
- clipboard.cs
- ConfigXmlText.cs
- SingleAnimation.cs
- PropertyItem.cs
- XmlBindingWorker.cs
- TabControlEvent.cs
- SizeAnimationBase.cs
- Listbox.cs
- NotCondition.cs
- EntitySetBase.cs
- QilFunction.cs
- SynchronizationValidator.cs
- RelationshipEndCollection.cs
- UnaryQueryOperator.cs
- RoleGroupCollection.cs
- TextDecorationUnitValidation.cs
- VirtualDirectoryMappingCollection.cs
- DataGridViewSortCompareEventArgs.cs
- WebPartEditorCancelVerb.cs
- ToolStripTextBox.cs
- TraceLevelStore.cs
- TCPListener.cs
- ElementNotAvailableException.cs
- HttpWebRequestElement.cs
- Query.cs
- WindowsSysHeader.cs
- CodeTryCatchFinallyStatement.cs
- ProxyGenerationError.cs
- WebZone.cs
- WebControlAdapter.cs
- AssemblyEvidenceFactory.cs
- UnlockInstanceCommand.cs
- CommandID.cs
- HMACSHA512.cs
- JoinElimination.cs
- PrintDialog.cs
- SqlFunctionAttribute.cs
- GraphicsContainer.cs
- SafeFileMappingHandle.cs
- Stylus.cs
- XappLauncher.cs
- AutomationEventArgs.cs
- ObjectSet.cs
- ListParaClient.cs
- QuotedPrintableStream.cs
- DisplayNameAttribute.cs
- ModelServiceImpl.cs
- ErrorProvider.cs
- HwndSource.cs
- JavaScriptString.cs
- FilteredXmlReader.cs
- QueryPageSettingsEventArgs.cs