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
- MimeReflector.cs
- TableColumn.cs
- WebControl.cs
- DispatcherObject.cs
- Query.cs
- SqlRecordBuffer.cs
- SiteMapNodeItem.cs
- UrlEncodedParameterWriter.cs
- PackWebRequest.cs
- MultilineStringConverter.cs
- SchemaCollectionPreprocessor.cs
- IndicShape.cs
- ExceptionHandler.cs
- EntityDataReader.cs
- DefaultParameterValueAttribute.cs
- TextOnlyOutput.cs
- DynamicDataRouteHandler.cs
- InvokeProviderWrapper.cs
- OdbcConnectionFactory.cs
- OptionUsage.cs
- QueryCacheKey.cs
- Math.cs
- ControlDesigner.cs
- AssociatedControlConverter.cs
- AuthenticationModuleElement.cs
- XsdValidatingReader.cs
- HostVisual.cs
- TreeView.cs
- TypefaceMap.cs
- TextAdaptor.cs
- FontStyles.cs
- EventProviderWriter.cs
- ResolveCriteriaApril2005.cs
- DrawingContextWalker.cs
- SchemaCollectionPreprocessor.cs
- DesignerActionList.cs
- MultipleCopiesCollection.cs
- ProfileService.cs
- SqlServices.cs
- ExtensionWindowHeader.cs
- XPathNodeIterator.cs
- SafeArrayTypeMismatchException.cs
- SettingsContext.cs
- TextPattern.cs
- WebPartEditorApplyVerb.cs
- DrawingContext.cs
- HttpCapabilitiesEvaluator.cs
- RawStylusInputReport.cs
- SID.cs
- ApplicationDirectoryMembershipCondition.cs
- PropertyDescriptorComparer.cs
- RegexCode.cs
- GradientStop.cs
- SimpleBitVector32.cs
- Models.cs
- RemotingServices.cs
- QilInvoke.cs
- SymLanguageVendor.cs
- UnmanagedMemoryStreamWrapper.cs
- HtmlAnchor.cs
- Int32CollectionConverter.cs
- TraceContextEventArgs.cs
- M3DUtil.cs
- EdmFunctionAttribute.cs
- SelectionGlyph.cs
- CmsUtils.cs
- CompilerError.cs
- DiscoveryDocument.cs
- SQLDoubleStorage.cs
- FrameSecurityDescriptor.cs
- DocumentEventArgs.cs
- PropertyBuilder.cs
- UserControl.cs
- Menu.cs
- DispatcherEventArgs.cs
- Utility.cs
- SemanticResolver.cs
- ChangeProcessor.cs
- FileUpload.cs
- DesignerHierarchicalDataSourceView.cs
- DocumentPageHost.cs
- InfoCardListRequest.cs
- DataGridColumnCollection.cs
- HeaderCollection.cs
- XMLSyntaxException.cs
- ActivityTrace.cs
- OrderByQueryOptionExpression.cs
- WebPartConnectionsConnectVerb.cs
- XamlVector3DCollectionSerializer.cs
- ScrollChangedEventArgs.cs
- ScriptingRoleServiceSection.cs
- ListBindingConverter.cs
- RoleManagerModule.cs
- PersonalizationStateQuery.cs
- ReturnEventArgs.cs
- WindowsFormsHostAutomationPeer.cs
- DBSchemaTable.cs
- SqlDataSourceSelectingEventArgs.cs
- documentation.cs
- HotSpot.cs