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
- QuotedStringFormatReader.cs
- SafeEventHandle.cs
- PasswordBox.cs
- SafeSecurityHandles.cs
- MetadataException.cs
- PersonalizationEntry.cs
- CompoundFileStorageReference.cs
- Emitter.cs
- XmlSerializationGeneratedCode.cs
- Path.cs
- DataViewManagerListItemTypeDescriptor.cs
- AppSettings.cs
- OletxCommittableTransaction.cs
- WebPartEditorApplyVerb.cs
- PresentationAppDomainManager.cs
- QueryConverter.cs
- DependencyObjectPropertyDescriptor.cs
- MailMessageEventArgs.cs
- ActivationServices.cs
- PropertyBuilder.cs
- KeyFrames.cs
- ActivitySurrogateSelector.cs
- IPipelineRuntime.cs
- TargetException.cs
- GB18030Encoding.cs
- Point3DValueSerializer.cs
- ValidationResult.cs
- CursorConverter.cs
- EmptyControlCollection.cs
- DbDataReader.cs
- MappingMetadataHelper.cs
- KerberosRequestorSecurityToken.cs
- ComPlusInstanceContextInitializer.cs
- PageBuildProvider.cs
- RowToFieldTransformer.cs
- EventData.cs
- TableCellCollection.cs
- ServiceMetadataPublishingElement.cs
- SessionEndingEventArgs.cs
- XmlAtomicValue.cs
- CodeMemberField.cs
- ReversePositionQuery.cs
- ServerValidateEventArgs.cs
- Vector3DIndependentAnimationStorage.cs
- StylusPointProperty.cs
- CompModSwitches.cs
- PreviewPrintController.cs
- AttachedPropertyBrowsableWhenAttributePresentAttribute.cs
- SerializationStore.cs
- VirtualPathExtension.cs
- ManagementBaseObject.cs
- StylusPoint.cs
- TabItemAutomationPeer.cs
- DataRelation.cs
- DocumentPageTextView.cs
- ViewValidator.cs
- SqlUserDefinedAggregateAttribute.cs
- DataSourceConverter.cs
- DatePickerAutomationPeer.cs
- SnapshotChangeTrackingStrategy.cs
- exports.cs
- TextTreePropertyUndoUnit.cs
- CodeThrowExceptionStatement.cs
- XPathLexer.cs
- DebugView.cs
- DelegatingConfigHost.cs
- NextPreviousPagerField.cs
- ObjectParameterCollection.cs
- ExpandCollapsePattern.cs
- x509utils.cs
- Grant.cs
- IdentifierCollection.cs
- RegisteredExpandoAttribute.cs
- invalidudtexception.cs
- UrlAuthorizationModule.cs
- Renderer.cs
- SqlDependencyListener.cs
- SqlLiftIndependentRowExpressions.cs
- OdbcUtils.cs
- PageEventArgs.cs
- CollectionChangeEventArgs.cs
- ISAPIRuntime.cs
- AssemblyInfo.cs
- NamespaceMapping.cs
- ContentPlaceHolder.cs
- PropertyMetadata.cs
- SessionStateUtil.cs
- ArrayElementGridEntry.cs
- ToolBarButtonClickEvent.cs
- SoapClientMessage.cs
- SQLGuidStorage.cs
- EditorOptionAttribute.cs
- PlacementWorkspace.cs
- Rijndael.cs
- COMException.cs
- BitmapSourceSafeMILHandle.cs
- CalendarKeyboardHelper.cs
- DataGridColumn.cs
- TableLayoutPanelResizeGlyph.cs
- ColorConverter.cs