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
- WindowsPen.cs
- MimeTypePropertyAttribute.cs
- DataGridViewLayoutData.cs
- AssociatedControlConverter.cs
- TableHeaderCell.cs
- CellQuery.cs
- XLinq.cs
- ContainsRowNumberChecker.cs
- XmlSchemaSequence.cs
- login.cs
- XMLDiffLoader.cs
- DefaultEventAttribute.cs
- EncoderParameter.cs
- PrintDocument.cs
- List.cs
- SimpleType.cs
- NativeCompoundFileAPIs.cs
- CompilerErrorCollection.cs
- GradientStop.cs
- XmlTextAttribute.cs
- RepeaterItemEventArgs.cs
- TranslateTransform.cs
- RemoveStoryboard.cs
- WindowVisualStateTracker.cs
- SlipBehavior.cs
- ProfileServiceManager.cs
- BoolExpression.cs
- PresentationTraceSources.cs
- XmlMemberMapping.cs
- Rss20ItemFormatter.cs
- _CacheStreams.cs
- Policy.cs
- MyContact.cs
- SelectQueryOperator.cs
- WebPart.cs
- FullTrustAssemblyCollection.cs
- SamlAuthorityBinding.cs
- MimeReflector.cs
- DataGridViewRowCollection.cs
- RuleSettingsCollection.cs
- ParserStreamGeometryContext.cs
- LocalValueEnumerator.cs
- AsyncCodeActivity.cs
- GlyphElement.cs
- ConstructorExpr.cs
- AxDesigner.cs
- ColorTranslator.cs
- StylusPlugInCollection.cs
- SimpleParser.cs
- OletxTransactionManager.cs
- AutoResetEvent.cs
- ValidatorCollection.cs
- LambdaCompiler.ControlFlow.cs
- CommonDialog.cs
- FontCacheUtil.cs
- MaskedTextProvider.cs
- Rotation3DAnimationUsingKeyFrames.cs
- MenuItemStyle.cs
- HandlerFactoryCache.cs
- MarshalByValueComponent.cs
- FormatterServicesNoSerializableCheck.cs
- PasswordRecovery.cs
- EngineSite.cs
- XmlName.cs
- MenuItemBinding.cs
- LongValidator.cs
- NavigationCommands.cs
- FixedDocument.cs
- CachedPathData.cs
- SmtpReplyReaderFactory.cs
- OnOperation.cs
- EventHandlerList.cs
- XmlSchemaNotation.cs
- MediaEntryAttribute.cs
- ArrayItemValue.cs
- DataChangedEventManager.cs
- WebPartsPersonalizationAuthorization.cs
- _LocalDataStoreMgr.cs
- ArraySortHelper.cs
- DataMisalignedException.cs
- RuleSettingsCollection.cs
- AssociatedControlConverter.cs
- XmlSchemaElement.cs
- SQLMembershipProvider.cs
- DataGridViewRowPrePaintEventArgs.cs
- ColumnHeaderConverter.cs
- DataListItemEventArgs.cs
- JulianCalendar.cs
- XmlQueryOutput.cs
- SqlDataSourceEnumerator.cs
- MailAddressCollection.cs
- RunInstallerAttribute.cs
- FileDialogCustomPlacesCollection.cs
- wgx_exports.cs
- TextParagraphView.cs
- SqlBuffer.cs
- SqlCharStream.cs
- BitmapFrameEncode.cs
- Canvas.cs
- PropertyValidationContext.cs