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
- TaskCanceledException.cs
- ConfigurationElementCollection.cs
- ZipPackagePart.cs
- LineBreak.cs
- PrivilegeNotHeldException.cs
- TableCell.cs
- ActiveXHelper.cs
- ZipPackage.cs
- UserControl.cs
- DataGridrowEditEndingEventArgs.cs
- SQLDoubleStorage.cs
- HttpProtocolImporter.cs
- XhtmlMobileTextWriter.cs
- DynamicPropertyHolder.cs
- WebReferencesBuildProvider.cs
- Image.cs
- TextSegment.cs
- RayHitTestParameters.cs
- TableCellAutomationPeer.cs
- CallTemplateAction.cs
- OperatingSystem.cs
- ListView.cs
- HtmlFormParameterReader.cs
- ByteRangeDownloader.cs
- WithStatement.cs
- TreeNodeBindingCollection.cs
- SafeCryptoKeyHandle.cs
- ChangePassword.cs
- PeerTransportSecuritySettings.cs
- ListViewItem.cs
- UpdateTranslator.cs
- fixedPageContentExtractor.cs
- EmissiveMaterial.cs
- Validator.cs
- SqlProfileProvider.cs
- VisualBrush.cs
- CodeThrowExceptionStatement.cs
- FormViewPagerRow.cs
- SiteMapNodeCollection.cs
- BamlResourceContent.cs
- MessageQueueAccessControlEntry.cs
- RelationshipManager.cs
- DataSetMappper.cs
- RemotingException.cs
- ConditionCollection.cs
- Msec.cs
- GridViewCommandEventArgs.cs
- CompleteWizardStep.cs
- RelatedCurrencyManager.cs
- Privilege.cs
- PropertyChangedEventManager.cs
- EmptyEnumerable.cs
- InputMethodStateChangeEventArgs.cs
- SafeFileHandle.cs
- OleDbException.cs
- HttpCookieCollection.cs
- TextRunCacheImp.cs
- MessageFormatterConverter.cs
- categoryentry.cs
- StreamReader.cs
- DataGridRowHeaderAutomationPeer.cs
- PassportAuthentication.cs
- Convert.cs
- TextSelectionHelper.cs
- AutomationPatternInfo.cs
- DictionaryManager.cs
- DynamicActivityProperty.cs
- EntityProviderFactory.cs
- SelectionProviderWrapper.cs
- RightsManagementLicense.cs
- RowToParametersTransformer.cs
- QuaternionRotation3D.cs
- MemoryMappedViewAccessor.cs
- AssemblyAssociatedContentFileAttribute.cs
- PerformanceCounterScope.cs
- UnsafeNetInfoNativeMethods.cs
- KeyValuePair.cs
- AmbientLight.cs
- Inline.cs
- DispatcherSynchronizationContext.cs
- WindowsListViewGroupHelper.cs
- MsmqInputMessage.cs
- PenContexts.cs
- HttpConfigurationContext.cs
- Command.cs
- ExpressionHelper.cs
- Types.cs
- SerializerProvider.cs
- RequiredFieldValidator.cs
- DataGridTable.cs
- ConfigurationManagerHelperFactory.cs
- WindowClosedEventArgs.cs
- FontInfo.cs
- ResXFileRef.cs
- TextRunProperties.cs
- ConvertEvent.cs
- TableLayoutPanelCellPosition.cs
- ScaleTransform.cs
- TraceSource.cs
- OneOfTypeConst.cs