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
- HandledMouseEvent.cs
- FtpCachePolicyElement.cs
- ApplicationServiceManager.cs
- WsatTransactionInfo.cs
- HiddenFieldDesigner.cs
- SoapHeader.cs
- PropertyGridView.cs
- Asn1IntegerConverter.cs
- __Filters.cs
- RadioButtonPopupAdapter.cs
- MeshGeometry3D.cs
- DocumentSequenceHighlightLayer.cs
- TemplateBamlRecordReader.cs
- DependencyObject.cs
- ContentFileHelper.cs
- TriggerCollection.cs
- KeyboardDevice.cs
- BuildProvider.cs
- SecureStringHasher.cs
- CmsInterop.cs
- ResXResourceReader.cs
- TablePattern.cs
- AutomationElement.cs
- HtmlInputReset.cs
- DataBoundControlHelper.cs
- ScriptResourceMapping.cs
- BaseCodePageEncoding.cs
- PeerMessageDispatcher.cs
- RadioButtonAutomationPeer.cs
- ClientBuildManager.cs
- DocumentGrid.cs
- _NtlmClient.cs
- StrongName.cs
- DbFunctionCommandTree.cs
- HostedBindingBehavior.cs
- DependencyPropertyChangedEventArgs.cs
- SemanticResolver.cs
- ProjectionPath.cs
- WpfKnownType.cs
- XmlName.cs
- StateItem.cs
- AppLevelCompilationSectionCache.cs
- ImageSourceConverter.cs
- Expressions.cs
- TemplateControlBuildProvider.cs
- MultipleViewPattern.cs
- CodePageEncoding.cs
- ControlBindingsConverter.cs
- PaperSource.cs
- X509UI.cs
- X509CertificateTokenFactoryCredential.cs
- ClientScriptManager.cs
- HttpsHostedTransportConfiguration.cs
- wgx_commands.cs
- XPathDocumentNavigator.cs
- ControlLocalizer.cs
- StyleXamlParser.cs
- BinaryObjectWriter.cs
- KeyToListMap.cs
- AliasedSlot.cs
- ConsoleCancelEventArgs.cs
- SqlInternalConnectionTds.cs
- regiisutil.cs
- BindingContext.cs
- BinaryParser.cs
- CodeTypeDeclarationCollection.cs
- RenamedEventArgs.cs
- TextServicesManager.cs
- AccessibilityHelperForVista.cs
- DataGridRowDetailsEventArgs.cs
- Evidence.cs
- PathGradientBrush.cs
- TrackingProfileCache.cs
- DataGridViewSelectedCellCollection.cs
- XamlRtfConverter.cs
- ColumnMapCopier.cs
- GroupByQueryOperator.cs
- ProfileSettings.cs
- DefaultPropertyAttribute.cs
- ProviderSettings.cs
- List.cs
- LoadMessageLogger.cs
- XmlReflectionImporter.cs
- MembershipPasswordException.cs
- Splitter.cs
- GenericQueueSurrogate.cs
- SmiEventSink_DeferedProcessing.cs
- RangeValuePatternIdentifiers.cs
- ColumnResult.cs
- Compiler.cs
- UniqueEventHelper.cs
- WebProxyScriptElement.cs
- JsonStringDataContract.cs
- JsonSerializer.cs
- SubclassTypeValidator.cs
- HttpConfigurationContext.cs
- ExtendedPropertyDescriptor.cs
- XamlInt32CollectionSerializer.cs
- TextFormatterImp.cs
- NativeMethods.cs