Code:
/ DotNET / DotNET / 8.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
- ObjectStorage.cs
- JsonUriDataContract.cs
- SqlRetyper.cs
- UnsafeNativeMethods.cs
- Floater.cs
- RefreshEventArgs.cs
- Accessible.cs
- CodeNamespaceImport.cs
- SessionConnectionReader.cs
- QueueProcessor.cs
- PropertyEmitterBase.cs
- LogRestartAreaEnumerator.cs
- CreateUserErrorEventArgs.cs
- HostProtectionException.cs
- QilExpression.cs
- BatchServiceHost.cs
- UpdateCompiler.cs
- SqlParameter.cs
- SafeCertificateStore.cs
- WebConfigurationFileMap.cs
- ComponentChangingEvent.cs
- Assert.cs
- ToolTipService.cs
- EditorZone.cs
- IdentifierCollection.cs
- WebPartEditorApplyVerb.cs
- AuditLog.cs
- AnimationClock.cs
- DecodeHelper.cs
- CollectionViewSource.cs
- UnsafeNetInfoNativeMethods.cs
- NonClientArea.cs
- DropTarget.cs
- DesignerAdRotatorAdapter.cs
- ColumnMapTranslator.cs
- DataFieldEditor.cs
- KnownTypes.cs
- PrintDocument.cs
- DataSet.cs
- OdbcDataAdapter.cs
- CheckBox.cs
- UnescapedXmlDiagnosticData.cs
- DateTimeFormat.cs
- CompositeDataBoundControl.cs
- Menu.cs
- EntityDataSourceReferenceGroup.cs
- SpotLight.cs
- VersionedStreamOwner.cs
- InfoCardSymmetricAlgorithm.cs
- Freezable.cs
- EditorPartChrome.cs
- DataGridViewRowPostPaintEventArgs.cs
- WebBrowser.cs
- FormsIdentity.cs
- TemplatedMailWebEventProvider.cs
- FormsAuthenticationConfiguration.cs
- AttributeAction.cs
- HtmlTableRow.cs
- QilPatternVisitor.cs
- EndEvent.cs
- Pens.cs
- SspiNegotiationTokenProvider.cs
- DescendantQuery.cs
- ResourceManagerWrapper.cs
- ContainerParagraph.cs
- Byte.cs
- DoubleConverter.cs
- IdentityHolder.cs
- EmbeddedObject.cs
- AxHost.cs
- Geometry.cs
- IISMapPath.cs
- UserNameSecurityTokenProvider.cs
- BatchStream.cs
- GPRECT.cs
- VerificationAttribute.cs
- DesignerVerbToolStripMenuItem.cs
- ChildTable.cs
- ThumbAutomationPeer.cs
- HtmlTable.cs
- CharEntityEncoderFallback.cs
- NetworkInformationPermission.cs
- M3DUtil.cs
- WebPartTracker.cs
- ListViewItem.cs
- ChangeDirector.cs
- RawKeyboardInputReport.cs
- DataServiceEntityAttribute.cs
- TextSegment.cs
- StoreAnnotationsMap.cs
- PropertyPathConverter.cs
- AppliedDeviceFiltersEditor.cs
- AbstractExpressions.cs
- DataObjectPastingEventArgs.cs
- ReservationNotFoundException.cs
- _TLSstream.cs
- TypedTableBase.cs
- FtpWebRequest.cs
- PolicyLevel.cs
- BaseServiceProvider.cs