Code:
/ 4.0 / 4.0 / untmp / 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.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- RequestQueryProcessor.cs
- XmlKeywords.cs
- BufferedReceiveElement.cs
- GridLengthConverter.cs
- KeyGesture.cs
- TopClause.cs
- COAUTHIDENTITY.cs
- WebServiceData.cs
- MaterialCollection.cs
- MemberAccessException.cs
- XamlHostingSectionGroup.cs
- RangeExpression.cs
- Utility.cs
- MailHeaderInfo.cs
- ParameterBinding.cs
- ListViewGroup.cs
- StorageAssociationSetMapping.cs
- CodeObjectCreateExpression.cs
- ThicknessConverter.cs
- MouseGestureConverter.cs
- Int32Storage.cs
- BitmapPalette.cs
- ComponentEditorForm.cs
- FileReservationCollection.cs
- DependencyPropertyKind.cs
- Int32EqualityComparer.cs
- PropertyIDSet.cs
- ItemsPanelTemplate.cs
- SRDisplayNameAttribute.cs
- RIPEMD160.cs
- FragmentNavigationEventArgs.cs
- StringSource.cs
- ExpressionWriter.cs
- SamlAction.cs
- SqlConnectionPoolGroupProviderInfo.cs
- TypeGeneratedEventArgs.cs
- ParentUndoUnit.cs
- TraceUtility.cs
- FormsAuthenticationUserCollection.cs
- ImageSourceConverter.cs
- WebPartConnectionsConfigureVerb.cs
- WebPartVerbsEventArgs.cs
- BuildProviderAppliesToAttribute.cs
- IPEndPoint.cs
- HtmlUtf8RawTextWriter.cs
- RowsCopiedEventArgs.cs
- CommonObjectSecurity.cs
- TextSelectionProcessor.cs
- WebPartDesigner.cs
- TemplateField.cs
- FileIOPermission.cs
- FormViewPagerRow.cs
- Token.cs
- XmlTextAttribute.cs
- WebPartManager.cs
- PrimitiveXmlSerializers.cs
- PopupRoot.cs
- InputElement.cs
- Control.cs
- WsdlWriter.cs
- DBCSCodePageEncoding.cs
- NumericPagerField.cs
- DataService.cs
- Convert.cs
- Expression.cs
- TextBoxBase.cs
- JsonCollectionDataContract.cs
- InfoCardRSACryptoProvider.cs
- LocalValueEnumerator.cs
- BindingMemberInfo.cs
- Schema.cs
- CmsUtils.cs
- path.cs
- RegexWriter.cs
- RoleManagerSection.cs
- DataSourceView.cs
- BindValidationContext.cs
- DoubleCollectionValueSerializer.cs
- Compiler.cs
- HtmlForm.cs
- XmlHelper.cs
- EntityDataSourceSelectedEventArgs.cs
- PowerModeChangedEventArgs.cs
- FrameworkElementAutomationPeer.cs
- ModelVisual3D.cs
- LogExtent.cs
- RoutedEventValueSerializer.cs
- RegexFCD.cs
- PackageRelationshipCollection.cs
- TextModifierScope.cs
- _ListenerAsyncResult.cs
- SecurityCriticalDataForSet.cs
- ColumnTypeConverter.cs
- EventBookmark.cs
- X509ChainElement.cs
- SqlParameterizer.cs
- ElementUtil.cs
- ConnectionConsumerAttribute.cs
- ConstraintConverter.cs
- _NTAuthentication.cs