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
- DataGridColumnHeader.cs
- TextDecorations.cs
- filewebrequest.cs
- FocusWithinProperty.cs
- WebControl.cs
- DataServiceKeyAttribute.cs
- SqlTypeSystemProvider.cs
- FontSourceCollection.cs
- TrackingRecord.cs
- BitmapMetadataEnumerator.cs
- Blend.cs
- ToolTip.cs
- TextBoxBase.cs
- Operators.cs
- IDispatchConstantAttribute.cs
- SqlBinder.cs
- PenLineJoinValidation.cs
- DataGridViewTextBoxCell.cs
- EasingKeyFrames.cs
- PolicyValidator.cs
- RotationValidation.cs
- DataContractSerializer.cs
- DateTimeStorage.cs
- TaskSchedulerException.cs
- CursorInteropHelper.cs
- StatusStrip.cs
- DataGridViewAdvancedBorderStyle.cs
- SqlInternalConnectionTds.cs
- mediaclock.cs
- BufferBuilder.cs
- ProofTokenCryptoHandle.cs
- XmlSequenceWriter.cs
- ReceiveMessageRecord.cs
- PeerNameRecord.cs
- FixedTextView.cs
- SortKey.cs
- ActivityBindForm.cs
- ConversionContext.cs
- Highlights.cs
- MessageProperties.cs
- CallbackValidatorAttribute.cs
- XsltCompileContext.cs
- StringPropertyBuilder.cs
- UIElementPropertyUndoUnit.cs
- GridViewDeleteEventArgs.cs
- ArraySegment.cs
- PropertyRecord.cs
- HandlerMappingMemo.cs
- ToolStripSettings.cs
- GetPageCompletedEventArgs.cs
- ConfigurationSection.cs
- IntegerValidator.cs
- BindingBase.cs
- DefaultSection.cs
- DefaultAsyncDataDispatcher.cs
- X509Certificate2Collection.cs
- OptimalBreakSession.cs
- ImageBrush.cs
- HierarchicalDataBoundControlAdapter.cs
- InputChannelBinder.cs
- XmlSignificantWhitespace.cs
- CodeDOMProvider.cs
- StylusShape.cs
- ArcSegment.cs
- xamlnodes.cs
- StructureChangedEventArgs.cs
- InternalBufferOverflowException.cs
- OdbcError.cs
- TextParaLineResult.cs
- ArrayExtension.cs
- DebuggerAttributes.cs
- ObjectListGeneralPage.cs
- DirectoryGroupQuery.cs
- TextBoxLine.cs
- FrameworkEventSource.cs
- CallbackHandler.cs
- StrongTypingException.cs
- StringConverter.cs
- HttpHandlerAction.cs
- KoreanLunisolarCalendar.cs
- ParagraphResult.cs
- BitmapCodecInfoInternal.cs
- NameHandler.cs
- OdbcCommandBuilder.cs
- MouseButtonEventArgs.cs
- Regex.cs
- DecoderBestFitFallback.cs
- ListInitExpression.cs
- SectionInput.cs
- CuspData.cs
- EnumConverter.cs
- WebPartVerbCollection.cs
- TypeResolver.cs
- PackWebRequest.cs
- ToolboxCategory.cs
- PrinterUnitConvert.cs
- BinaryReader.cs
- AssociationSetEnd.cs
- WebPartConnectionCollection.cs
- MemberInfoSerializationHolder.cs