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
- DescendantOverDescendantQuery.cs
- SettingsBase.cs
- GAC.cs
- TypeExtension.cs
- GroupByExpressionRewriter.cs
- nulltextnavigator.cs
- CodeAccessPermission.cs
- RegexCharClass.cs
- CalendarItem.cs
- WizardStepCollectionEditor.cs
- ColumnClickEvent.cs
- Lease.cs
- BamlRecordReader.cs
- HorizontalAlignConverter.cs
- FrugalMap.cs
- InstanceOwner.cs
- AffineTransform3D.cs
- Vector3dCollection.cs
- CssClassPropertyAttribute.cs
- MenuBase.cs
- Annotation.cs
- NetNamedPipeSecurityMode.cs
- PagesSection.cs
- WebHttpEndpointElement.cs
- SBCSCodePageEncoding.cs
- PartBasedPackageProperties.cs
- PaperSize.cs
- BindingFormattingDialog.cs
- HTTPNotFoundHandler.cs
- JsonUriDataContract.cs
- HwndKeyboardInputProvider.cs
- DockAndAnchorLayout.cs
- XamlPoint3DCollectionSerializer.cs
- EllipticalNodeOperations.cs
- FlowDocumentScrollViewerAutomationPeer.cs
- DynamicRenderer.cs
- StylusDevice.cs
- ViewStateException.cs
- DoubleConverter.cs
- TextShapeableCharacters.cs
- CollectionExtensions.cs
- RequestResizeEvent.cs
- JavascriptCallbackBehaviorAttribute.cs
- ErrorCodes.cs
- FullTextBreakpoint.cs
- ClientSideProviderDescription.cs
- DataGridCell.cs
- CellConstant.cs
- TextSpan.cs
- Util.cs
- SqlInternalConnectionSmi.cs
- dataSvcMapFileLoader.cs
- FixedSOMGroup.cs
- CodeCommentStatement.cs
- ByteViewer.cs
- DataTableMappingCollection.cs
- GenericEnumerator.cs
- HttpHandlerActionCollection.cs
- DataGridBoolColumn.cs
- StateValidator.cs
- ExtensionDataReader.cs
- SHA512Managed.cs
- GridItemProviderWrapper.cs
- ListBox.cs
- TimeSpanConverter.cs
- FixedSOMPageElement.cs
- Directory.cs
- SecurityStandardsManager.cs
- GridViewHeaderRowPresenter.cs
- PersianCalendar.cs
- WindowsSpinner.cs
- WebEventTraceProvider.cs
- SessionSwitchEventArgs.cs
- HebrewCalendar.cs
- EllipseGeometry.cs
- fixedPageContentExtractor.cs
- RectangleHotSpot.cs
- ManualResetEvent.cs
- Compiler.cs
- Internal.cs
- TypeUsageBuilder.cs
- DetailsViewPagerRow.cs
- EventLogTraceListener.cs
- RenderingBiasValidation.cs
- TextDecoration.cs
- DataServices.cs
- ReadOnlyCollectionBase.cs
- SoapSchemaImporter.cs
- Soap11ServerProtocol.cs
- LoadWorkflowAsyncResult.cs
- BasicCellRelation.cs
- ListItemParagraph.cs
- FilteredDataSetHelper.cs
- EventsTab.cs
- SemanticBasicElement.cs
- Thickness.cs
- PolyBezierSegment.cs
- DataSourceCacheDurationConverter.cs
- PrimaryKeyTypeConverter.cs
- XmlCDATASection.cs