Code:
/ DotNET / DotNET / 8.0 / untmp / whidbey / REDBITS / ndp / fx / src / Designer / WebForms / System / Web / UI / Design / ControlHelper.cs / 1 / ControlHelper.cs
//------------------------------------------------------------------------------ //// Copyright (c) Microsoft Corporation. All rights reserved. // //----------------------------------------------------------------------------- namespace System.Web.UI.Design { using System.Collections; using System.ComponentModel; using System.ComponentModel.Design; using System.CodeDom; using System.Runtime.InteropServices; using System.Collections.Generic; internal static class ControlHelper { ////// Finds a control with a given ID starting with the siblings of the given control. /// This method walk up naming container boundaries to find the control. /// internal static Control FindControl(IServiceProvider serviceProvider, Control control, string controlIdToFind) { if (String.IsNullOrEmpty(controlIdToFind)) { throw new ArgumentNullException("controlIdToFind"); } while (control != null) { if (control.Site == null || control.Site.Container == null) { return null; } IComponent component = control.Site.Container.Components[controlIdToFind]; if (component != null) { return component as Control; } // Try to get the parent of this control's naming container IDesignerHost designerHost = (IDesignerHost)control.Site.GetService(typeof(IDesignerHost)); if (designerHost == null) { return null; } ControlDesigner designer = designerHost.GetDesigner(control) as ControlDesigner; if (designer == null || designer.View == null || designer.View.NamingContainerDesigner == null) { return null; } control = designer.View.NamingContainerDesigner.Component as Control; } if (serviceProvider != null) { IDesignerHost host = (IDesignerHost)serviceProvider.GetService(typeof(IDesignerHost)); if (host != null) { IContainer container = host.Container; if (container != null) { return container.Components[controlIdToFind] as System.Web.UI.Control; } } } return null; } internal delegate bool IsValidComponentDelegate(IComponent component); internal static IListGetAllComponents(IComponent component, IsValidComponentDelegate componentFilter) { List foundComponents = new List (); while (component != null) { IList components = GetComponentsInContainer(component, componentFilter); foundComponents.AddRange(components); // Walk up to the naming container to get the next level of controls IDesignerHost designerHost = (IDesignerHost)component.Site.GetService(typeof(IDesignerHost)); ControlDesigner designer = designerHost.GetDesigner(component) as ControlDesigner; component = null; if (designer != null && designer.View != null && designer.View.NamingContainerDesigner != null) { component = designer.View.NamingContainerDesigner.Component; } } return foundComponents; } private static IList GetComponentsInContainer(IComponent component, IsValidComponentDelegate componentFilter) { System.Diagnostics.Debug.Assert(component != null); List foundComponents = new List (); if ((component.Site != null) && (component.Site.Container != null)) { foreach (IComponent comp in component.Site.Container.Components) { if (componentFilter(comp) && !Marshal.IsComObject(comp)) { PropertyDescriptor modifierProp = TypeDescriptor.GetProperties(comp)["Modifiers"]; if (modifierProp != null) { MemberAttributes modifiers = (MemberAttributes)modifierProp.GetValue(comp); if ((modifiers & MemberAttributes.AccessMask) == MemberAttributes.Private) { // must be declared as public or protected continue; } } foundComponents.Add(comp); } } } return foundComponents; } } } // 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
- LinearGradientBrush.cs
- DoubleAnimationUsingPath.cs
- HtmlTextArea.cs
- FontWeight.cs
- RadioButton.cs
- __ComObject.cs
- DesignerVerbCollection.cs
- VisualCollection.cs
- PropertyEmitter.cs
- SecurityState.cs
- TokenBasedSetEnumerator.cs
- EventTrigger.cs
- SchemaManager.cs
- Baml6ConstructorInfo.cs
- ViewStateChangedEventArgs.cs
- TraceHandler.cs
- BaseDataListActionList.cs
- HtmlImage.cs
- ManagementOptions.cs
- TextDecorationCollectionConverter.cs
- ThreadExceptionEvent.cs
- CompositeFontFamily.cs
- WebEventCodes.cs
- ToolStripStatusLabel.cs
- SafeNativeMethods.cs
- ValueTable.cs
- InfoCardTrace.cs
- SelectionPattern.cs
- CatalogPart.cs
- CaseInsensitiveHashCodeProvider.cs
- WebPartCloseVerb.cs
- DerivedKeySecurityTokenStub.cs
- WhitespaceReader.cs
- TypeContext.cs
- IListConverters.cs
- GlyphRun.cs
- LayoutUtils.cs
- Roles.cs
- ControlAdapter.cs
- ToolStripItem.cs
- DropShadowBitmapEffect.cs
- WebScriptMetadataMessageEncodingBindingElement.cs
- Int64KeyFrameCollection.cs
- unsafenativemethodstextservices.cs
- DataTableNewRowEvent.cs
- IPEndPoint.cs
- InputMethodStateTypeInfo.cs
- PersistChildrenAttribute.cs
- SlipBehavior.cs
- PopOutPanel.cs
- DataViewSetting.cs
- EpmCustomContentWriterNodeData.cs
- PublishLicense.cs
- WindowCollection.cs
- SkewTransform.cs
- FrameworkContentElementAutomationPeer.cs
- TextChange.cs
- GeneralTransform.cs
- EventProvider.cs
- ProfileGroupSettings.cs
- PropertyNames.cs
- PageThemeCodeDomTreeGenerator.cs
- WebBrowsableAttribute.cs
- GroupDescription.cs
- PointCollectionValueSerializer.cs
- BindingCollection.cs
- Mappings.cs
- ItemCheckedEvent.cs
- securestring.cs
- UserControl.cs
- InvokeHandlers.cs
- ResourcePermissionBaseEntry.cs
- WebHttpBindingCollectionElement.cs
- SyndicationItem.cs
- UnauthorizedAccessException.cs
- UInt64Converter.cs
- InternalBase.cs
- CultureTable.cs
- ChannelSinkStacks.cs
- VolatileEnlistmentState.cs
- MouseGesture.cs
- InvokeCompletedEventArgs.cs
- GetPageNumberCompletedEventArgs.cs
- CommunicationException.cs
- SplineKeyFrames.cs
- NotFiniteNumberException.cs
- WeakReferenceEnumerator.cs
- SafeProcessHandle.cs
- XmlIterators.cs
- ValidationSummary.cs
- CompositionCommandSet.cs
- SqlClientPermission.cs
- DbParameterHelper.cs
- Dynamic.cs
- SqlDependency.cs
- IIS7UserPrincipal.cs
- ImageSource.cs
- TableLayoutColumnStyleCollection.cs
- SyncMethodInvoker.cs
- LayoutDump.cs