Code:
/ DotNET / DotNET / 8.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
- ScopeElementCollection.cs
- MsmqIntegrationElement.cs
- AutoResizedEvent.cs
- PanelStyle.cs
- clipboard.cs
- MarkerProperties.cs
- Span.cs
- DataGridViewColumnConverter.cs
- TableMethodGenerator.cs
- ByteBufferPool.cs
- FloaterParagraph.cs
- ObjectListGeneralPage.cs
- CollectionChangeEventArgs.cs
- TextAnchor.cs
- ValidatingPropertiesEventArgs.cs
- WindowsSysHeader.cs
- columnmapkeybuilder.cs
- SimpleWorkerRequest.cs
- TextViewSelectionProcessor.cs
- FontResourceCache.cs
- UndoUnit.cs
- ObjectStateFormatter.cs
- DecimalAnimationUsingKeyFrames.cs
- PackageDigitalSignature.cs
- PreviewKeyDownEventArgs.cs
- MemberProjectionIndex.cs
- CollectionChangeEventArgs.cs
- TransformerInfoCollection.cs
- TemplateControlBuildProvider.cs
- SmiEventSink_DeferedProcessing.cs
- TileBrush.cs
- HttpListenerRequest.cs
- NavigationProperty.cs
- ViewUtilities.cs
- DesignerActionItemCollection.cs
- MonthCalendarDesigner.cs
- SizeAnimation.cs
- GridViewDeleteEventArgs.cs
- DataTrigger.cs
- SqlMethodTransformer.cs
- OptimizedTemplateContentHelper.cs
- ReadOnlyMetadataCollection.cs
- EntityCommandExecutionException.cs
- Control.cs
- SqlInfoMessageEvent.cs
- ObjectStateEntryBaseUpdatableDataRecord.cs
- CultureInfo.cs
- CategoryAttribute.cs
- IntSecurity.cs
- PersistNameAttribute.cs
- TextRange.cs
- MarkupCompiler.cs
- XmlnsPrefixAttribute.cs
- ResourceExpressionBuilder.cs
- RouteParser.cs
- BinaryObjectInfo.cs
- BulletDecorator.cs
- EncryptedData.cs
- WebBrowserDocumentCompletedEventHandler.cs
- NavigationFailedEventArgs.cs
- ViewValidator.cs
- EventEntry.cs
- SerTrace.cs
- LogReservationCollection.cs
- RoutedCommand.cs
- AttachedPropertyBrowsableForTypeAttribute.cs
- FreeFormDragDropManager.cs
- ModelUIElement3D.cs
- ResourceLoader.cs
- SettingsAttributes.cs
- UriWriter.cs
- CustomCredentialPolicy.cs
- SerializationSectionGroup.cs
- Environment.cs
- BooleanToVisibilityConverter.cs
- OdbcParameterCollection.cs
- PackageRelationship.cs
- ThaiBuddhistCalendar.cs
- RSACryptoServiceProvider.cs
- FrameworkPropertyMetadata.cs
- HopperCache.cs
- SymbolEqualComparer.cs
- DataGridViewCellValueEventArgs.cs
- PropertyGridEditorPart.cs
- X509WindowsSecurityToken.cs
- MsmqInputChannelListenerBase.cs
- PortCache.cs
- ListViewDataItem.cs
- NameValueConfigurationElement.cs
- ToolStripItemImageRenderEventArgs.cs
- HostUtils.cs
- PackageStore.cs
- VisualStyleInformation.cs
- TouchDevice.cs
- HostedTransportConfigurationManager.cs
- StateMachineSubscriptionManager.cs
- IdentityNotMappedException.cs
- ReadOnlyHierarchicalDataSourceView.cs
- XmlElementAttribute.cs
- PolicyStatement.cs