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
- XmlWrappingWriter.cs
- NativeMethods.cs
- ButtonBase.cs
- SQLInt64.cs
- CodeDirectoryCompiler.cs
- ListView.cs
- Block.cs
- SerialPort.cs
- HttpDebugHandler.cs
- ButtonColumn.cs
- DataTemplateKey.cs
- TransformCollection.cs
- WebPartCollection.cs
- PersonalizationState.cs
- WindowAutomationPeer.cs
- ExpandSegment.cs
- BamlLocalizationDictionary.cs
- OdbcStatementHandle.cs
- Funcletizer.cs
- DecoderNLS.cs
- SystemColors.cs
- ParseNumbers.cs
- ArcSegment.cs
- RequestCachePolicyConverter.cs
- DashStyles.cs
- XmlIncludeAttribute.cs
- ScaleTransform.cs
- Form.cs
- XmlNamespaceMappingCollection.cs
- SqlDataReaderSmi.cs
- Size.cs
- ReceiveContextCollection.cs
- RectAnimationUsingKeyFrames.cs
- ParserContext.cs
- NameValuePair.cs
- XmlILIndex.cs
- FileSecurity.cs
- Point.cs
- Native.cs
- DetailsViewPageEventArgs.cs
- RouteValueExpressionBuilder.cs
- XmlSchemaNotation.cs
- NumericPagerField.cs
- SmtpMail.cs
- SimpleType.cs
- AttributeEmitter.cs
- XsdBuilder.cs
- ISAPIWorkerRequest.cs
- TcpServerChannel.cs
- DomainConstraint.cs
- TableColumn.cs
- MetafileHeader.cs
- TextDecorationCollectionConverter.cs
- HandlerMappingMemo.cs
- IndentTextWriter.cs
- Psha1DerivedKeyGenerator.cs
- EdgeProfileValidation.cs
- EntityDataSourceDesignerHelper.cs
- StoreItemCollection.Loader.cs
- ProfileSettings.cs
- FixedSOMTextRun.cs
- RawUIStateInputReport.cs
- HijriCalendar.cs
- SystemIPGlobalStatistics.cs
- nulltextnavigator.cs
- UDPClient.cs
- MarginCollapsingState.cs
- WebPartZoneCollection.cs
- HyperLinkDataBindingHandler.cs
- Assembly.cs
- SQLSingleStorage.cs
- XmlSerializationWriter.cs
- InitiatorServiceModelSecurityTokenRequirement.cs
- mediapermission.cs
- TextContainerChangedEventArgs.cs
- NullableDecimalSumAggregationOperator.cs
- SpecialTypeDataContract.cs
- DataGridSortCommandEventArgs.cs
- DataBoundControl.cs
- HitTestResult.cs
- RowBinding.cs
- ContentFileHelper.cs
- ClassDataContract.cs
- ListView.cs
- DbMetaDataCollectionNames.cs
- ReachIDocumentPaginatorSerializer.cs
- QueryUtil.cs
- ButtonAutomationPeer.cs
- InputProcessorProfilesLoader.cs
- BamlResourceSerializer.cs
- SerialStream.cs
- SrgsDocumentParser.cs
- MatrixStack.cs
- SortExpressionBuilder.cs
- ResourcesChangeInfo.cs
- RSACryptoServiceProvider.cs
- TypeLoadException.cs
- WinInet.cs
- elementinformation.cs
- SmtpNegotiateAuthenticationModule.cs