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
- CursorConverter.cs
- typedescriptorpermission.cs
- CapabilitiesRule.cs
- Metafile.cs
- DataGridViewCellConverter.cs
- HtmlTextBoxAdapter.cs
- IntPtr.cs
- MediaEntryAttribute.cs
- XmlSchemaObjectCollection.cs
- ActivityDesigner.cs
- GeometryCombineModeValidation.cs
- ArgIterator.cs
- RichTextBox.cs
- WsdlInspector.cs
- ZoomPercentageConverter.cs
- ProfessionalColorTable.cs
- BatchStream.cs
- OperandQuery.cs
- VideoDrawing.cs
- TaskFileService.cs
- BamlLocalizableResourceKey.cs
- LiteralControl.cs
- ResolvedKeyFrameEntry.cs
- PageThemeCodeDomTreeGenerator.cs
- XamlPointCollectionSerializer.cs
- XslAst.cs
- ShortcutKeysEditor.cs
- WebPartVerbsEventArgs.cs
- NamedPipeChannelFactory.cs
- WebPartEditVerb.cs
- ExportOptions.cs
- WebPartsPersonalizationAuthorization.cs
- EventLogEntryCollection.cs
- MarkupWriter.cs
- BooleanKeyFrameCollection.cs
- HebrewCalendar.cs
- DeflateEmulationStream.cs
- BaseDataListPage.cs
- FlagsAttribute.cs
- ListItemsCollectionEditor.cs
- ReadOnlyCollection.cs
- ObjectDataSourceSelectingEventArgs.cs
- ConfigurationProperty.cs
- XPathBinder.cs
- ColumnCollection.cs
- MetadataItem_Static.cs
- GeometryHitTestParameters.cs
- UnsafeNativeMethods.cs
- QueryRelOp.cs
- SystemSounds.cs
- CanonicalXml.cs
- VirtualPathUtility.cs
- ZipIOExtraFieldZip64Element.cs
- MembershipUser.cs
- ReturnEventArgs.cs
- ConcurrentDictionary.cs
- NameNode.cs
- IgnoreFileBuildProvider.cs
- ConstraintEnumerator.cs
- Vector3DCollectionConverter.cs
- StateBag.cs
- KerberosRequestorSecurityToken.cs
- DbParameterCollectionHelper.cs
- SplitterCancelEvent.cs
- SamlAttribute.cs
- ContainerActivationHelper.cs
- RtType.cs
- LoginView.cs
- Int64KeyFrameCollection.cs
- DocumentXmlWriter.cs
- CheckBoxDesigner.cs
- ValidatingReaderNodeData.cs
- XamlSerializerUtil.cs
- KeyedHashAlgorithm.cs
- ScriptingAuthenticationServiceSection.cs
- SoapElementAttribute.cs
- xmlfixedPageInfo.cs
- DrawingGroup.cs
- ParsedRoute.cs
- Options.cs
- DataListComponentEditor.cs
- UserControlParser.cs
- XPathScanner.cs
- GroupBoxDesigner.cs
- CallbackHandler.cs
- ContentElement.cs
- Helper.cs
- HighlightComponent.cs
- SelectedCellsCollection.cs
- ViewDesigner.cs
- DrawingBrush.cs
- BasicAsyncResult.cs
- RegisteredExpandoAttribute.cs
- LocationReferenceEnvironment.cs
- DocumentViewerBaseAutomationPeer.cs
- MediaTimeline.cs
- CharEntityEncoderFallback.cs
- EpmCustomContentDeSerializer.cs
- HtmlEmptyTagControlBuilder.cs
- FormatSettings.cs