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
- Compiler.cs
- Grant.cs
- PageBreakRecord.cs
- SessionStateModule.cs
- NavigationWindow.cs
- SafeMILHandle.cs
- Command.cs
- RichTextBoxAutomationPeer.cs
- MasterPageParser.cs
- XmlUtilWriter.cs
- Visual3D.cs
- CanonicalFontFamilyReference.cs
- FrameDimension.cs
- RectConverter.cs
- WebPartZoneBase.cs
- EditorPart.cs
- InProcStateClientManager.cs
- DynamicResourceExtensionConverter.cs
- DataSetUtil.cs
- StylusCollection.cs
- GifBitmapEncoder.cs
- KnownIds.cs
- CodeMethodInvokeExpression.cs
- SystemKeyConverter.cs
- DPCustomTypeDescriptor.cs
- XmlSerializer.cs
- XmlHierarchicalEnumerable.cs
- WebPartEventArgs.cs
- NetNamedPipeBinding.cs
- XPathDocumentBuilder.cs
- InstancePersistence.cs
- Synchronization.cs
- ObjectItemNoOpAssemblyLoader.cs
- SendActivityEventArgs.cs
- MdImport.cs
- SinglePhaseEnlistment.cs
- ValueSerializerAttribute.cs
- FileVersionInfo.cs
- OptimalTextSource.cs
- activationcontext.cs
- TopClause.cs
- CalendarAutomationPeer.cs
- JoinTreeNode.cs
- Frame.cs
- Encoder.cs
- VersionConverter.cs
- ConfigurationPermission.cs
- SamlAction.cs
- EncoderParameters.cs
- DoubleUtil.cs
- CommandExpr.cs
- XsltLoader.cs
- ExpandSegmentCollection.cs
- ConfigurationSettings.cs
- RegisteredExpandoAttribute.cs
- Convert.cs
- InvalidateEvent.cs
- CommandManager.cs
- CallbackException.cs
- DataControlExtensions.cs
- WindowsListViewItem.cs
- DataAdapter.cs
- DependencyObjectProvider.cs
- EmptyQuery.cs
- TypeHelper.cs
- TextElement.cs
- DataGridRowDetailsEventArgs.cs
- TextLineResult.cs
- DataObjectAttribute.cs
- QueryRewriter.cs
- LineInfo.cs
- PingOptions.cs
- SafeCoTaskMem.cs
- DispatcherHooks.cs
- CachedPathData.cs
- DataGridViewComboBoxEditingControl.cs
- KnownTypesProvider.cs
- SectionInformation.cs
- ComponentEditorPage.cs
- StringFunctions.cs
- CommandManager.cs
- OutOfMemoryException.cs
- ParameterToken.cs
- DataObjectSettingDataEventArgs.cs
- VectorKeyFrameCollection.cs
- ExecutionEngineException.cs
- FileIOPermission.cs
- WindowPattern.cs
- ControlParameter.cs
- HashCodeCombiner.cs
- Literal.cs
- BaseUriHelper.cs
- CachedFontFamily.cs
- ServiceParser.cs
- TransactionBridge.cs
- TaskSchedulerException.cs
- AnnotationResourceCollection.cs
- CallbackTimeoutsBehavior.cs
- Route.cs
- ContainerUtilities.cs