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
- BamlStream.cs
- TraceUtility.cs
- SimpleBitVector32.cs
- CommandID.cs
- Monitor.cs
- CqlParser.cs
- PageBuildProvider.cs
- RuleSetDialog.Designer.cs
- ThreadStaticAttribute.cs
- SQLMoney.cs
- MaxValueConverter.cs
- TemplatedWizardStep.cs
- XmlHierarchicalDataSourceView.cs
- AppDomainAttributes.cs
- PreviousTrackingServiceAttribute.cs
- RtfFormatStack.cs
- ValueTable.cs
- TypeConverter.cs
- WebPartMenu.cs
- QuadraticBezierSegment.cs
- GridErrorDlg.cs
- SignatureDescription.cs
- XmlAttributes.cs
- ElementsClipboardData.cs
- InfoCardProofToken.cs
- StandardBindingOptionalReliableSessionElement.cs
- Stylesheet.cs
- WorkflowTransactionOptions.cs
- Int64AnimationBase.cs
- DbConnectionHelper.cs
- AsymmetricSignatureFormatter.cs
- GradientStopCollection.cs
- SoapElementAttribute.cs
- XmlAttributeAttribute.cs
- RemotingServices.cs
- InkCanvasSelectionAdorner.cs
- TransformFinalBlockRequest.cs
- BinaryParser.cs
- DataGridClipboardHelper.cs
- Common.cs
- CallbackValidatorAttribute.cs
- EntityContainerEntitySetDefiningQuery.cs
- TraceHandler.cs
- CacheOutputQuery.cs
- XslCompiledTransform.cs
- OleDbErrorCollection.cs
- RadioButtonStandardAdapter.cs
- WebBrowserPermission.cs
- NullExtension.cs
- EndpointDispatcher.cs
- ConnectionsZone.cs
- MimeImporter.cs
- XmlCharCheckingWriter.cs
- MouseEventArgs.cs
- DragCompletedEventArgs.cs
- RowsCopiedEventArgs.cs
- DocumentScope.cs
- EntryIndex.cs
- Rotation3DAnimationUsingKeyFrames.cs
- DataBindingHandlerAttribute.cs
- AmbientValueAttribute.cs
- FileInfo.cs
- SystemColorTracker.cs
- SubtreeProcessor.cs
- RevocationPoint.cs
- RenderingBiasValidation.cs
- ChineseLunisolarCalendar.cs
- WebServiceParameterData.cs
- PresentationSource.cs
- Msec.cs
- contentDescriptor.cs
- SelectionProcessor.cs
- AddInAdapter.cs
- URI.cs
- SqlNotificationRequest.cs
- StyleBamlRecordReader.cs
- Byte.cs
- FileLoadException.cs
- RuleValidation.cs
- DataServiceRequest.cs
- DbRetry.cs
- Style.cs
- GroupStyle.cs
- FunctionParameter.cs
- CrossContextChannel.cs
- ArrangedElementCollection.cs
- SigningCredentials.cs
- ClosureBinding.cs
- NameSpaceExtractor.cs
- ProcessModelInfo.cs
- SortDescription.cs
- TextDpi.cs
- sqlcontext.cs
- DrawingVisualDrawingContext.cs
- TableDetailsCollection.cs
- WsrmMessageInfo.cs
- DataGridViewAccessibleObject.cs
- PaginationProgressEventArgs.cs
- IPHostEntry.cs
- TableCell.cs