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
- SqlCacheDependencyDatabaseCollection.cs
- WhiteSpaceTrimStringConverter.cs
- XNodeValidator.cs
- SHA512Managed.cs
- ActivityInstanceReference.cs
- ToolStripRenderer.cs
- DataGridRelationshipRow.cs
- Matrix3D.cs
- SerializationAttributes.cs
- ModelProperty.cs
- ProviderSettings.cs
- HitTestDrawingContextWalker.cs
- RoutedEvent.cs
- GuidelineCollection.cs
- ExpressionParser.cs
- UpDownEvent.cs
- SimplePropertyEntry.cs
- InputBuffer.cs
- FixedTextSelectionProcessor.cs
- GreenMethods.cs
- WCFServiceClientProxyGenerator.cs
- SchemaEntity.cs
- XomlCompilerParameters.cs
- SQLDecimalStorage.cs
- AnnotationDocumentPaginator.cs
- DPTypeDescriptorContext.cs
- HtmlCalendarAdapter.cs
- Verify.cs
- RangeValuePattern.cs
- DataExpression.cs
- PointF.cs
- httpapplicationstate.cs
- UnsafeNativeMethods.cs
- MenuBindingsEditorForm.cs
- ResizeBehavior.cs
- Timer.cs
- StrokeRenderer.cs
- UserControlCodeDomTreeGenerator.cs
- ServerProtocol.cs
- WebPartConnection.cs
- MonthChangedEventArgs.cs
- Clock.cs
- MsmqBindingElementBase.cs
- WebControlsSection.cs
- FillBehavior.cs
- SimpleBitVector32.cs
- SafeReversePInvokeHandle.cs
- RuleInfoComparer.cs
- AnnotationComponentManager.cs
- QueryCacheKey.cs
- XmlSerializerSection.cs
- Filter.cs
- TypeForwardedToAttribute.cs
- ProvideValueServiceProvider.cs
- DtrList.cs
- QueryResponse.cs
- SizeIndependentAnimationStorage.cs
- WindowClosedEventArgs.cs
- FrameSecurityDescriptor.cs
- DrawingVisualDrawingContext.cs
- ValidatingPropertiesEventArgs.cs
- JournalEntryListConverter.cs
- StaticDataManager.cs
- TrackingRecord.cs
- RecordManager.cs
- WebServiceData.cs
- TimeoutValidationAttribute.cs
- Point.cs
- CustomAttributeFormatException.cs
- WizardForm.cs
- SystemIPGlobalProperties.cs
- DPTypeDescriptorContext.cs
- TileBrush.cs
- XDeferredAxisSource.cs
- SoapHttpTransportImporter.cs
- ipaddressinformationcollection.cs
- FormViewDeleteEventArgs.cs
- SplitterEvent.cs
- XmlArrayAttribute.cs
- SiteMapNodeItem.cs
- BinarySerializer.cs
- SqlRowUpdatedEvent.cs
- precedingquery.cs
- SettingsAttributeDictionary.cs
- AsyncOperationManager.cs
- GeneratedView.cs
- XmlNamedNodeMap.cs
- SchemaInfo.cs
- TransactionFilter.cs
- CombinedGeometry.cs
- Serializer.cs
- DecimalFormatter.cs
- PerformanceCounterManager.cs
- WindowsFormsLinkLabel.cs
- FamilyTypeface.cs
- TogglePatternIdentifiers.cs
- AnchoredBlock.cs
- EntryWrittenEventArgs.cs
- QuaternionIndependentAnimationStorage.cs
- DBConcurrencyException.cs