Code:
/ FX-1434 / FX-1434 / 1.0 / untmp / whidbey / REDBITS / ndp / fx / src / Designer / CompMod / System / ComponentModel / Design / Serialization / EventMemberCodeDomSerializer.cs / 1 / EventMemberCodeDomSerializer.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- namespace System.ComponentModel.Design.Serialization { using System; using System.CodeDom; using System.ComponentModel.Design; using System.Design; using System.Diagnostics; using System.Reflection; ////// A MemberCodeDomSerializer for events. /// internal sealed class EventMemberCodeDomSerializer : MemberCodeDomSerializer { private static CodeThisReferenceExpression _thisRef = new CodeThisReferenceExpression(); private static EventMemberCodeDomSerializer _default; internal static EventMemberCodeDomSerializer Default { get { if (_default == null) _default = new EventMemberCodeDomSerializer(); return _default; } } ////// This method actually performs the serialization. When the member is serialized /// the necessary statements will be added to the statements collection. /// [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Security", "CA2102:CatchNonClsCompliantExceptionsInGeneralHandlers")] public override void Serialize(IDesignerSerializationManager manager, object value, MemberDescriptor descriptor, CodeStatementCollection statements) { EventDescriptor eventToSerialize = descriptor as EventDescriptor; if (manager == null) throw new ArgumentNullException("manager"); if (value == null) throw new ArgumentNullException("value"); if (eventToSerialize == null) throw new ArgumentNullException("descriptor"); if (statements == null) throw new ArgumentNullException("statements"); try { IEventBindingService eventBindings = (IEventBindingService)manager.GetService(typeof(IEventBindingService)); // VSWhidbey 204574: If the IEventBindingService is not available, we don't throw - we just don't do // anything. if (eventBindings != null) { PropertyDescriptor prop = eventBindings.GetEventProperty(eventToSerialize); string methodName = (string)prop.GetValue(value); if (methodName != null) { CodeDomSerializer.Trace("Event {0} bound to {1}", eventToSerialize.Name, methodName); CodeExpression eventTarget = SerializeToExpression(manager, value); CodeDomSerializer.TraceWarningIf(eventTarget == null, "Object has no name and no propery ref in context so we cannot serialize events: {0}", value); if (eventTarget != null) { CodeTypeReference delegateTypeRef = new CodeTypeReference(eventToSerialize.EventType); CodeDelegateCreateExpression delegateCreate = new CodeDelegateCreateExpression(delegateTypeRef, _thisRef, methodName); CodeEventReferenceExpression eventRef = new CodeEventReferenceExpression(eventTarget, eventToSerialize.Name); CodeAttachEventStatement attach = new CodeAttachEventStatement(eventRef, delegateCreate); attach.UserData[typeof(Delegate)] = eventToSerialize.EventType; statements.Add(attach); } } } } catch (Exception e) { // Since we usually go through reflection, don't // show what our engine does, show what caused // the problem. // if (e is TargetInvocationException) { e = e.InnerException; } manager.ReportError(SR.GetString(SR.SerializerPropertyGenFailed, eventToSerialize.Name, e.Message)); } } ////// This method returns true if the given member descriptor should be serialized, /// or false if there is no need to serialize the member. /// public override bool ShouldSerialize(IDesignerSerializationManager manager, object value, MemberDescriptor descriptor) { return true; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- PartialCachingAttribute.cs
- ListItemsCollectionEditor.cs
- EntityDataSourceViewSchema.cs
- _FixedSizeReader.cs
- SplayTreeNode.cs
- ServiceContractGenerationContext.cs
- WebContentFormatHelper.cs
- DataRelationPropertyDescriptor.cs
- ConstrainedDataObject.cs
- EditorReuseAttribute.cs
- Socket.cs
- TrackBarRenderer.cs
- MailDefinition.cs
- WindowsRegion.cs
- NumericExpr.cs
- BoundPropertyEntry.cs
- XmlTextReader.cs
- ZipFileInfo.cs
- Int64Storage.cs
- RadioButtonList.cs
- WeakReferenceKey.cs
- OleDbParameter.cs
- XmlSchemaObjectTable.cs
- DataList.cs
- FileLevelControlBuilderAttribute.cs
- Recipient.cs
- TableLayoutSettings.cs
- EUCJPEncoding.cs
- CodeCompileUnit.cs
- TextShapeableCharacters.cs
- QilXmlWriter.cs
- XmlEncodedRawTextWriter.cs
- GenerateTemporaryAssemblyTask.cs
- ValueExpressions.cs
- DbConnectionPoolGroupProviderInfo.cs
- SystemException.cs
- RuleValidation.cs
- SqlTriggerAttribute.cs
- PagedDataSource.cs
- WSSecurityOneDotOneSendSecurityHeader.cs
- Highlights.cs
- DependencyPropertyDescriptor.cs
- HttpProtocolReflector.cs
- ListBase.cs
- Typeface.cs
- DataServiceClientException.cs
- EpmContentDeSerializer.cs
- PropertyChange.cs
- BaseTemplateParser.cs
- MappingMetadataHelper.cs
- Point3DCollection.cs
- LoadWorkflowByKeyAsyncResult.cs
- SimpleMailWebEventProvider.cs
- EventEntry.cs
- ArcSegment.cs
- GridPattern.cs
- ProjectedWrapper.cs
- SafeProcessHandle.cs
- TextElementCollectionHelper.cs
- HyperlinkAutomationPeer.cs
- XPathNodePointer.cs
- SchemaInfo.cs
- DocComment.cs
- ChameleonKey.cs
- ByteRangeDownloader.cs
- TraceHandlerErrorFormatter.cs
- SqlDependencyUtils.cs
- TemplateControlParser.cs
- CommandEventArgs.cs
- ListViewItem.cs
- ProviderIncompatibleException.cs
- SqlCacheDependency.cs
- CacheRequest.cs
- Contracts.cs
- IISMapPath.cs
- TaskScheduler.cs
- CombinedGeometry.cs
- CdpEqualityComparer.cs
- DetailsViewUpdatedEventArgs.cs
- ClientRolePrincipal.cs
- Int32CollectionValueSerializer.cs
- InvalidPrinterException.cs
- CompilerGeneratedAttribute.cs
- DataGridViewColumnStateChangedEventArgs.cs
- SqlCacheDependencyDatabaseCollection.cs
- XamlReader.cs
- RemoteWebConfigurationHost.cs
- CollectionsUtil.cs
- DataGridItem.cs
- Range.cs
- StreamGeometry.cs
- VersionedStream.cs
- BitmapPalettes.cs
- ProcessInputEventArgs.cs
- CodeDirectoryCompiler.cs
- OrderedDictionary.cs
- ConnectionInterfaceCollection.cs
- Char.cs
- LocatorManager.cs
- Oid.cs