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
- WorkflowTransactionOptions.cs
- DataSetViewSchema.cs
- GroupBox.cs
- XmlValidatingReaderImpl.cs
- HiddenFieldPageStatePersister.cs
- OracleBoolean.cs
- GifBitmapEncoder.cs
- TrustLevelCollection.cs
- ReadOnlyDataSourceView.cs
- SqlClientWrapperSmiStreamChars.cs
- Binding.cs
- SystemThemeKey.cs
- MaskedTextProvider.cs
- Interop.cs
- NodeLabelEditEvent.cs
- BindingGroup.cs
- IriParsingElement.cs
- InkCollectionBehavior.cs
- KeyInstance.cs
- Base64Encoder.cs
- DataGridParentRows.cs
- JoinQueryOperator.cs
- NamespaceDisplay.xaml.cs
- XsltFunctions.cs
- CodeNamespaceCollection.cs
- HtmlFormWrapper.cs
- GlyphRunDrawing.cs
- PointAnimationBase.cs
- ParagraphVisual.cs
- Calendar.cs
- DataGridTextBox.cs
- XmlIlTypeHelper.cs
- ThemeConfigurationDialog.cs
- SHA1CryptoServiceProvider.cs
- HwndAppCommandInputProvider.cs
- FormCollection.cs
- PrincipalPermission.cs
- JavascriptCallbackBehaviorAttribute.cs
- CanonicalFontFamilyReference.cs
- PlainXmlDeserializer.cs
- AdRotatorDesigner.cs
- HostAdapter.cs
- InsufficientMemoryException.cs
- UrlPath.cs
- DispatcherEventArgs.cs
- ResourceDisplayNameAttribute.cs
- CacheAxisQuery.cs
- WebPartZoneBaseDesigner.cs
- WorkflowInstanceProxy.cs
- DescriptionAttribute.cs
- RectAnimationClockResource.cs
- VersionedStreamOwner.cs
- UIElementHelper.cs
- WebPartExportVerb.cs
- Switch.cs
- ColorDialog.cs
- ReaderContextStackData.cs
- StringAttributeCollection.cs
- ListControl.cs
- UIntPtr.cs
- RenderCapability.cs
- UnmanagedMemoryStreamWrapper.cs
- ReflectTypeDescriptionProvider.cs
- SafeEventLogWriteHandle.cs
- ProviderUtil.cs
- OdbcFactory.cs
- AppDomainFactory.cs
- FragmentQueryKB.cs
- CorrelationManager.cs
- SemanticResultKey.cs
- DiffuseMaterial.cs
- PathFigureCollection.cs
- HttpResponseWrapper.cs
- Misc.cs
- InputBindingCollection.cs
- DeadCharTextComposition.cs
- CmsUtils.cs
- PropertyToken.cs
- HttpHandlerActionCollection.cs
- Exception.cs
- TwoPhaseCommit.cs
- StyleCollection.cs
- WaitHandle.cs
- UMPAttributes.cs
- AttributeTable.cs
- TransformerTypeCollection.cs
- StringStorage.cs
- BitmapSizeOptions.cs
- TemplatedMailWebEventProvider.cs
- GlobalizationAssembly.cs
- DataTablePropertyDescriptor.cs
- FixedDocumentSequencePaginator.cs
- PersonalizablePropertyEntry.cs
- ConditionCollection.cs
- PriorityQueue.cs
- NetPeerTcpBinding.cs
- CodeSubDirectoriesCollection.cs
- FocusManager.cs
- JsonGlobals.cs
- SmiContextFactory.cs