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
- _UncName.cs
- CreateSequence.cs
- ReadOnlyDataSource.cs
- InfoCardRSAPKCS1SignatureDeformatter.cs
- OpenFileDialog.cs
- MenuEventArgs.cs
- OperandQuery.cs
- DataGridViewEditingControlShowingEventArgs.cs
- TypedAsyncResult.cs
- ValueTypeFixupInfo.cs
- JsonXmlDataContract.cs
- SchemaObjectWriter.cs
- WebServiceResponse.cs
- SizeAnimation.cs
- OpCellTreeNode.cs
- TemplatePropertyEntry.cs
- XmlNode.cs
- indexingfiltermarshaler.cs
- Int16Storage.cs
- cookiecollection.cs
- XmlDataDocument.cs
- DependencyObjectPropertyDescriptor.cs
- PostBackTrigger.cs
- Emitter.cs
- InternalEnumValidator.cs
- ConnectorDragDropGlyph.cs
- Animatable.cs
- X509CertificateCollection.cs
- AddInStore.cs
- TextTreeExtractElementUndoUnit.cs
- SettingsPropertyWrongTypeException.cs
- Brushes.cs
- ICspAsymmetricAlgorithm.cs
- TreeWalker.cs
- HttpValueCollection.cs
- Code.cs
- SwitchDesigner.xaml.cs
- ServicesExceptionNotHandledEventArgs.cs
- ClientSettingsProvider.cs
- __Error.cs
- DelegatedStream.cs
- DataControlButton.cs
- XmlQualifiedName.cs
- Material.cs
- Dispatcher.cs
- PeerNameRegistration.cs
- HostingEnvironmentSection.cs
- SystemIPInterfaceProperties.cs
- TypeBinaryExpression.cs
- NavigationHelper.cs
- ErrorEventArgs.cs
- StreamGeometryContext.cs
- SqlDuplicator.cs
- TextEndOfSegment.cs
- SecurityCriticalDataForSet.cs
- ImplicitInputBrush.cs
- SSmlParser.cs
- TypeValidationEventArgs.cs
- SecurityKeyIdentifier.cs
- xamlnodes.cs
- ToolboxItem.cs
- PrintPreviewControl.cs
- COM2ComponentEditor.cs
- RawMouseInputReport.cs
- LogLogRecordEnumerator.cs
- WindowsFormsLinkLabel.cs
- MenuItemStyleCollection.cs
- FrameworkTextComposition.cs
- ProxyRpc.cs
- ValueUtilsSmi.cs
- SoapServerProtocol.cs
- CategoryGridEntry.cs
- ApplySecurityAndSendAsyncResult.cs
- PeerTransportListenAddressValidatorAttribute.cs
- FactoryGenerator.cs
- EventLogPermissionAttribute.cs
- RoutedEventHandlerInfo.cs
- FixedBufferAttribute.cs
- StylusShape.cs
- PrintEvent.cs
- UserControl.cs
- MediaTimeline.cs
- CanonicalFontFamilyReference.cs
- C14NUtil.cs
- TextDataBindingHandler.cs
- ObjectDisposedException.cs
- ClientSettingsStore.cs
- newitemfactory.cs
- Clause.cs
- SystemIPv4InterfaceProperties.cs
- StringSource.cs
- ColorTransform.cs
- BufferedMessageWriter.cs
- IsolatedStoragePermission.cs
- RuntimeIdentifierPropertyAttribute.cs
- CachedPathData.cs
- EntityContainerAssociationSet.cs
- AppSettingsExpressionBuilder.cs
- XpsException.cs
- DataBindingsDialog.cs