Code:
/ FX-1434 / FX-1434 / 1.0 / untmp / whidbey / REDBITS / ndp / fx / src / Designer / WinForms / System / WinForms / Design / EventHandlerService.cs / 1 / EventHandlerService.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- /* */ namespace System.Windows.Forms.Design { using System.Diagnostics; using System; using System.Windows.Forms; ////// /// /// public sealed class EventHandlerService : IEventHandlerService { // We cache the last requested handler for speed. // private object lastHandler; private Type lastHandlerType; // The handler stack // private HandlerEntry handlerHead; // Our change event // private EventHandler changedEvent; private readonly Control focusWnd; ////// /// public EventHandlerService(Control focusWnd) { this.focusWnd = focusWnd; } ///[To be supplied.] ////// /// public event EventHandler EventHandlerChanged { add { changedEvent += value; } remove { changedEvent -= value; } } ///[To be supplied.] ////// /// public Control FocusWindow { get { return focusWnd; } } ///[To be supplied.] ////// /// public object GetHandler(Type handlerType) { if (handlerType == lastHandlerType) { return lastHandler; } for (HandlerEntry entry = handlerHead; entry != null; entry = entry.next) { if (entry.handler != null && handlerType.IsInstanceOfType(entry.handler)) { lastHandlerType = handlerType; lastHandler = entry.handler; return entry.handler; } } return null; } ////// Gets the currently active event handler of the specified type. ////// /// Fires an OnEventHandlerChanged event. /// private void OnEventHandlerChanged(EventArgs e) { if (changedEvent != null) { ((EventHandler)changedEvent)(this, e); } } ////// /// public void PopHandler(object handler) { for (HandlerEntry entry = handlerHead; entry != null; entry = entry.next) { if (entry.handler == handler) { handlerHead = entry.next; lastHandler = null; lastHandlerType = null; OnEventHandlerChanged(EventArgs.Empty); return; } } Debug.Assert(handler == null || handlerHead == null, "Failed to locate handler to remove from list."); } ////// Pops /// the given handler off of the stack. ////// /// public void PushHandler(object handler) { handlerHead = new HandlerEntry(handler, handlerHead); // Update the handlerType if the Handler pushed is the same type as the last one .... // This is true when SplitContainer is on the form and Edit Properties pushed another handler. lastHandlerType = handler.GetType(); lastHandler = handlerHead.handler; OnEventHandlerChanged(EventArgs.Empty); } ///Pushes a new event handler on the stack. ////// /// Contains a single node of our handler stack. We typically /// have very few handlers, and the handlers are long-living, so /// I just implemented this as a linked list. /// private sealed class HandlerEntry { public object handler; public HandlerEntry next; ////// /// Creates a new handler entry objet. /// public HandlerEntry(object handler, HandlerEntry next) { this.handler = handler; this.next = next; } } } } // 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
- FileAuthorizationModule.cs
- BamlMapTable.cs
- DecodeHelper.cs
- translator.cs
- ToRequest.cs
- RepeaterItemCollection.cs
- UntrustedRecipientException.cs
- invalidudtexception.cs
- ContentControl.cs
- FamilyMap.cs
- UriSectionReader.cs
- PackUriHelper.cs
- ControlBindingsCollection.cs
- ValidationVisibilityAttribute.cs
- BrowserCapabilitiesCompiler.cs
- CultureSpecificCharacterBufferRange.cs
- PlatformCulture.cs
- Rect3DConverter.cs
- TransformProviderWrapper.cs
- SpinLock.cs
- Bookmark.cs
- NotifyParentPropertyAttribute.cs
- LogicalExpr.cs
- FontFamily.cs
- AutoResizedEvent.cs
- ArgumentFixer.cs
- ToolTipAutomationPeer.cs
- CrossContextChannel.cs
- PopOutPanel.cs
- DataGridViewButtonColumn.cs
- FileSecurity.cs
- StructuredTypeEmitter.cs
- BitVector32.cs
- CompareValidator.cs
- ListViewGroupItemCollection.cs
- AspNetSynchronizationContext.cs
- ListViewItem.cs
- QueryOptionExpression.cs
- AnnotationService.cs
- IISUnsafeMethods.cs
- DiagnosticStrings.cs
- ItemChangedEventArgs.cs
- SecurityTokenSerializer.cs
- ISFTagAndGuidCache.cs
- GlobalItem.cs
- CatalogPartChrome.cs
- ResourceProviderFactory.cs
- ConnectionConsumerAttribute.cs
- InvalidFilterCriteriaException.cs
- BuildResult.cs
- CodeSubDirectory.cs
- NGCSerializationManager.cs
- _NegoState.cs
- BuildResultCache.cs
- AttachmentService.cs
- StringValidator.cs
- TargetControlTypeCache.cs
- Calendar.cs
- LineBreak.cs
- ObjectDataSourceFilteringEventArgs.cs
- Registry.cs
- StringKeyFrameCollection.cs
- FontInfo.cs
- TrackingServices.cs
- DataSourceXmlAttributeAttribute.cs
- InputLanguageSource.cs
- CodeLinePragma.cs
- cryptoapiTransform.cs
- QueryableDataSourceView.cs
- BaseTemplateCodeDomTreeGenerator.cs
- AppliedDeviceFiltersDialog.cs
- XmlNullResolver.cs
- QueryOperator.cs
- Window.cs
- MsmqIntegrationAppDomainProtocolHandler.cs
- QilStrConcat.cs
- CustomServiceCredentials.cs
- PropertyPushdownHelper.cs
- WindowsToolbarAsMenu.cs
- ToolZoneDesigner.cs
- SortKey.cs
- IdentityHolder.cs
- StorageEntityContainerMapping.cs
- RenderingEventArgs.cs
- MLangCodePageEncoding.cs
- SourceFileInfo.cs
- UIElementCollection.cs
- Thread.cs
- EntityContainerEmitter.cs
- PackageRelationshipSelector.cs
- FontCacheLogic.cs
- ExpandableObjectConverter.cs
- MimeWriter.cs
- DataTemplateKey.cs
- ComponentChangingEvent.cs
- FixedPage.cs
- PartitionedDataSource.cs
- DataFormats.cs
- FormatterServices.cs
- PagedDataSource.cs