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
- ExpressionPrefixAttribute.cs
- MessageQueue.cs
- GCHandleCookieTable.cs
- TextEmbeddedObject.cs
- ScriptReferenceBase.cs
- Visitors.cs
- ArrayConverter.cs
- DesignBindingConverter.cs
- XPathException.cs
- configsystem.cs
- BasicKeyConstraint.cs
- ValidatedMobileControlConverter.cs
- clipboard.cs
- HttpModuleCollection.cs
- BinaryConverter.cs
- FieldTemplateFactory.cs
- IdentityManager.cs
- pingexception.cs
- DataGridViewSelectedCellsAccessibleObject.cs
- BaseTemplateCodeDomTreeGenerator.cs
- RSAOAEPKeyExchangeDeformatter.cs
- WindowsIdentity.cs
- OdbcEnvironmentHandle.cs
- TrustLevelCollection.cs
- StyleBamlTreeBuilder.cs
- XmlSchemaAnnotated.cs
- SoapException.cs
- FileSystemEventArgs.cs
- GenericTransactionFlowAttribute.cs
- SharedDp.cs
- FilePrompt.cs
- ResourcesChangeInfo.cs
- FunctionUpdateCommand.cs
- ThicknessAnimation.cs
- RenderDataDrawingContext.cs
- ReceiveActivityDesigner.cs
- ListViewContainer.cs
- ExtendedPropertyCollection.cs
- TemplatePagerField.cs
- TextStore.cs
- SystemPens.cs
- ResourcePermissionBaseEntry.cs
- AttachedPropertyMethodSelector.cs
- DelegatedStream.cs
- HttpVersion.cs
- ToolStripScrollButton.cs
- DbFunctionCommandTree.cs
- WorkflowInstance.cs
- ProfileParameter.cs
- Activator.cs
- validation.cs
- OdbcUtils.cs
- DataControlReference.cs
- HandleRef.cs
- PackagePart.cs
- OptimizedTemplateContentHelper.cs
- DeviceContext2.cs
- ControlType.cs
- HtmlHead.cs
- DataSetUtil.cs
- InvalidComObjectException.cs
- HttpResponseHeader.cs
- QueryPageSettingsEventArgs.cs
- DisplayInformation.cs
- ViewSimplifier.cs
- ToolStripDropDownMenu.cs
- FormatConvertedBitmap.cs
- XmlCDATASection.cs
- TextFormatterContext.cs
- ViewStateChangedEventArgs.cs
- PropertyNames.cs
- ImageDrawing.cs
- EventDescriptorCollection.cs
- ResolvedKeyFrameEntry.cs
- sqlser.cs
- OutputCacheSettingsSection.cs
- ValueCollectionParameterReader.cs
- PropertyNames.cs
- AdRotator.cs
- ScriptManagerProxy.cs
- xmlformatgeneratorstatics.cs
- TypeNameParser.cs
- BamlRecords.cs
- LinkDescriptor.cs
- ScriptingScriptResourceHandlerSection.cs
- initElementDictionary.cs
- SchemaType.cs
- MethodRental.cs
- OutOfProcStateClientManager.cs
- DesignerResources.cs
- HtmlInputCheckBox.cs
- CredentialCache.cs
- SoapReflector.cs
- DbParameterHelper.cs
- ViewGenerator.cs
- PreviewPageInfo.cs
- NativeDirectoryServicesQueryAPIs.cs
- ProbeMatches11.cs
- DodSequenceMerge.cs
- LineServices.cs