Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / whidbey / NetFXspW7 / ndp / fx / src / CompMod / System / ComponentModel / EventHandlerList.cs / 1 / EventHandlerList.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- namespace System.ComponentModel { using System; using System.Diagnostics.CodeAnalysis; using System.Security.Permissions; ////// [HostProtection(SharedState = true)] public sealed class EventHandlerList : IDisposable { ListEntry head; Component parent; ///Provides a simple list of delegates. This class cannot be inherited. ////// Creates a new event handler list. /// [SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands")] public EventHandlerList() { } ////// Creates a new event handler list. The parent component is used to check the component's /// CanRaiseEvents property. /// [SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands")] internal EventHandlerList(Component parent) { this.parent = parent; } ////// public Delegate this[object key] { [SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands")] get { ListEntry e = null; if (parent == null || parent.CanRaiseEventsInternal) { e = Find(key); } if (e != null) { return e.handler; } else { return null; } } set { ListEntry e = Find(key); if (e != null) { e.handler = value; } else { head = new ListEntry(key, value, head); } } } ///Gets or sets the delegate for the specified key. ////// [SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands")] public void AddHandler(object key, Delegate value) { ListEntry e = Find(key); if (e != null) { e.handler = Delegate.Combine(e.handler, value); } else { head = new ListEntry(key, value, head); } } ///[To be supplied.] ///allows you to add a list of events to this list public void AddHandlers(EventHandlerList listToAddFrom) { ListEntry currentListEntry = listToAddFrom.head; while (currentListEntry != null) { AddHandler(currentListEntry.key, currentListEntry.handler); currentListEntry = currentListEntry.next; } } ////// public void Dispose() { head = null; } private ListEntry Find(object key) { ListEntry found = head; while (found != null) { if (found.key == key) { break; } found = found.next; } return found; } ///[To be supplied.] ////// [SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands")] public void RemoveHandler(object key, Delegate value) { ListEntry e = Find(key); if (e != null) { e.handler = Delegate.Remove(e.handler, value); } // else... no error for removal of non-existant delegate // } private sealed class ListEntry { internal ListEntry next; internal object key; internal Delegate handler; public ListEntry(object key, Delegate handler, ListEntry next) { this.next = next; this.key = key; this.handler = handler; } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. //------------------------------------------------------------------------------ //[To be supplied.] ///// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- namespace System.ComponentModel { using System; using System.Diagnostics.CodeAnalysis; using System.Security.Permissions; ////// [HostProtection(SharedState = true)] public sealed class EventHandlerList : IDisposable { ListEntry head; Component parent; ///Provides a simple list of delegates. This class cannot be inherited. ////// Creates a new event handler list. /// [SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands")] public EventHandlerList() { } ////// Creates a new event handler list. The parent component is used to check the component's /// CanRaiseEvents property. /// [SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands")] internal EventHandlerList(Component parent) { this.parent = parent; } ////// public Delegate this[object key] { [SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands")] get { ListEntry e = null; if (parent == null || parent.CanRaiseEventsInternal) { e = Find(key); } if (e != null) { return e.handler; } else { return null; } } set { ListEntry e = Find(key); if (e != null) { e.handler = value; } else { head = new ListEntry(key, value, head); } } } ///Gets or sets the delegate for the specified key. ////// [SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands")] public void AddHandler(object key, Delegate value) { ListEntry e = Find(key); if (e != null) { e.handler = Delegate.Combine(e.handler, value); } else { head = new ListEntry(key, value, head); } } ///[To be supplied.] ///allows you to add a list of events to this list public void AddHandlers(EventHandlerList listToAddFrom) { ListEntry currentListEntry = listToAddFrom.head; while (currentListEntry != null) { AddHandler(currentListEntry.key, currentListEntry.handler); currentListEntry = currentListEntry.next; } } ////// public void Dispose() { head = null; } private ListEntry Find(object key) { ListEntry found = head; while (found != null) { if (found.key == key) { break; } found = found.next; } return found; } ///[To be supplied.] ////// [SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands")] public void RemoveHandler(object key, Delegate value) { ListEntry e = Find(key); if (e != null) { e.handler = Delegate.Remove(e.handler, value); } // else... no error for removal of non-existant delegate // } private sealed class ListEntry { internal ListEntry next; internal object key; internal Delegate handler; public ListEntry(object key, Delegate handler, ListEntry next) { this.next = next; this.key = key; this.handler = handler; } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.[To be supplied.] ///
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- DesignUtil.cs
- TablePattern.cs
- CollectionType.cs
- StreamUpdate.cs
- XPathQilFactory.cs
- WindowsFormsDesignerOptionService.cs
- ServiceMetadataPublishingElement.cs
- LambdaCompiler.cs
- SystemGatewayIPAddressInformation.cs
- DataGridViewRowsAddedEventArgs.cs
- XmlSchemaChoice.cs
- CodeDirectoryCompiler.cs
- RuntimeArgumentHandle.cs
- ScriptingWebServicesSectionGroup.cs
- HostUtils.cs
- Matrix.cs
- Schema.cs
- ContainerControl.cs
- ActivityCompletionCallbackWrapper.cs
- InkCanvasFeedbackAdorner.cs
- EntityConnection.cs
- DeclarativeCatalogPart.cs
- SaveFileDialog.cs
- webbrowsersite.cs
- DataGridViewRowHeightInfoNeededEventArgs.cs
- SimpleRecyclingCache.cs
- XmlSchemaImporter.cs
- ComplexLine.cs
- SEHException.cs
- TokenBasedSet.cs
- EncodingNLS.cs
- WebPartConnectionsConfigureVerb.cs
- ContentPlaceHolder.cs
- FrameworkContextData.cs
- NetDispatcherFaultException.cs
- SystemEvents.cs
- ExeContext.cs
- XmlLinkedNode.cs
- SqlEnums.cs
- ComboBoxAutomationPeer.cs
- NameValueConfigurationElement.cs
- HostVisual.cs
- LinkClickEvent.cs
- BufferModeSettings.cs
- CapabilitiesSection.cs
- MarshalByRefObject.cs
- SafeNativeMethods.cs
- OleDbPropertySetGuid.cs
- ModelPropertyCollectionImpl.cs
- Rule.cs
- EncoderBestFitFallback.cs
- StringBuilder.cs
- CompensableActivity.cs
- AppModelKnownContentFactory.cs
- XmlLinkedNode.cs
- ModelTreeEnumerator.cs
- ChannelToken.cs
- DynamicEndpointElement.cs
- InvalidAsynchronousStateException.cs
- Action.cs
- ProfileProvider.cs
- PolyLineSegmentFigureLogic.cs
- XmlQueryRuntime.cs
- CallbackTimeoutsBehavior.cs
- While.cs
- ConnectorDragDropGlyph.cs
- DiscoveryClientProtocol.cs
- SchemaTableColumn.cs
- Point3DConverter.cs
- Inflater.cs
- DoubleCollectionValueSerializer.cs
- SqlServer2KCompatibilityCheck.cs
- FormView.cs
- ServiceReflector.cs
- LayoutManager.cs
- SettingsPropertyWrongTypeException.cs
- CookieParameter.cs
- TypeReference.cs
- bindurihelper.cs
- SessionState.cs
- WorkflowOperationContext.cs
- KeyConverter.cs
- HtmlEmptyTagControlBuilder.cs
- RuntimeVariableList.cs
- RangeValuePattern.cs
- IndependentlyAnimatedPropertyMetadata.cs
- HierarchicalDataSourceIDConverter.cs
- ClientConfigPaths.cs
- ContextMenuService.cs
- DefaultValueConverter.cs
- path.cs
- HttpServerVarsCollection.cs
- ValidationRuleCollection.cs
- SimpleExpression.cs
- InitializingNewItemEventArgs.cs
- FileDialog.cs
- CatalogPartCollection.cs
- SqlTypeSystemProvider.cs
- HelloOperation11AsyncResult.cs
- BasicCellRelation.cs