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
- DocumentReferenceCollection.cs
- HyperLinkField.cs
- StructuralObject.cs
- Publisher.cs
- BulletChrome.cs
- OdbcEnvironment.cs
- KeyValueSerializer.cs
- ClusterSafeNativeMethods.cs
- CodeComment.cs
- PathParser.cs
- RadioButtonList.cs
- FillErrorEventArgs.cs
- WorkflowServiceAttributes.cs
- Socket.cs
- NameValueFileSectionHandler.cs
- NamedPermissionSet.cs
- TextTreeRootTextBlock.cs
- RuntimeConfigLKG.cs
- DomNameTable.cs
- PageAdapter.cs
- ListItemCollection.cs
- DictationGrammar.cs
- WaitHandle.cs
- PopOutPanel.cs
- CompositeKey.cs
- CategoryNameCollection.cs
- TrackingStringDictionary.cs
- ScriptingScriptResourceHandlerSection.cs
- QueryableFilterUserControl.cs
- WorkflowQueueInfo.cs
- DataComponentNameHandler.cs
- HtmlEncodedRawTextWriter.cs
- DictionaryContent.cs
- ButtonStandardAdapter.cs
- DataGridViewCellStyleEditor.cs
- Speller.cs
- PnrpPermission.cs
- SafeNativeMethods.cs
- NegotiateStream.cs
- NamespaceCollection.cs
- InvalidOleVariantTypeException.cs
- XmlKeywords.cs
- EastAsianLunisolarCalendar.cs
- ADRole.cs
- StrokeCollection2.cs
- GlyphsSerializer.cs
- AnnotationResourceCollection.cs
- SocketConnection.cs
- GcSettings.cs
- StreamUpdate.cs
- ComponentManagerBroker.cs
- TargetConverter.cs
- PropertyItem.cs
- TableStyle.cs
- CheckBoxList.cs
- TraceHandlerErrorFormatter.cs
- _HelperAsyncResults.cs
- DataServiceHostFactory.cs
- FixedTextBuilder.cs
- DefaultHttpHandler.cs
- SqlProfileProvider.cs
- PersistenceProvider.cs
- RowsCopiedEventArgs.cs
- KnownBoxes.cs
- VisemeEventArgs.cs
- XMLSyntaxException.cs
- MenuScrollingVisibilityConverter.cs
- FlowDocumentPage.cs
- CharAnimationBase.cs
- AppDomainManager.cs
- CellTreeNode.cs
- DataIdProcessor.cs
- CodeDelegateInvokeExpression.cs
- MessageEnumerator.cs
- NetCodeGroup.cs
- SqlNode.cs
- LocalBuilder.cs
- IssuedTokenParametersElement.cs
- KnownAssemblyEntry.cs
- ContainerParagraph.cs
- ArgumentsParser.cs
- DbConnectionClosed.cs
- StrokeCollection.cs
- MdiWindowListStrip.cs
- XmlDataSource.cs
- SmtpFailedRecipientException.cs
- OletxTransactionFormatter.cs
- SequenceDesignerAccessibleObject.cs
- DES.cs
- ButtonChrome.cs
- XmlDocument.cs
- SspiHelper.cs
- SafeLibraryHandle.cs
- TileBrush.cs
- EncodingNLS.cs
- ContextMenu.cs
- DynamicValueConverter.cs
- ipaddressinformationcollection.cs
- ThreadExceptionDialog.cs
- ExceptionHandlers.cs