| File: System\ComponentModel\Design\TypeDescriptorFilterService.cs | Web Access |
| Project: src\winforms\src\System.Windows.Forms.Design\src\System.Windows.Forms.Design.csproj (System.Windows.Forms.Design) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System.Collections; namespace System.ComponentModel.Design; /// <summary> /// This service is requested by TypeDescriptor when asking for type information for a component. /// Our implementation forwards this filter onto IDesignerFilter on the component's designer, should one exist. /// </summary> internal sealed class TypeDescriptorFilterService : ITypeDescriptorFilterService { /// <summary> /// Internal ctor to prevent semitrust from creating us. /// </summary> internal TypeDescriptorFilterService() { } /// <summary> /// Helper method to return the designer for a given component. /// </summary> private static IDesigner? GetDesigner(IComponent component) { ISite? site = component.Site; if (site.TryGetService(out IDesignerHost? host)) { return host.GetDesigner(component); } return null; } /// <summary> /// Provides a way to filter the attributes from a component that are displayed to the user. /// </summary> bool ITypeDescriptorFilterService.FilterAttributes(IComponent component, IDictionary attributes) { ArgumentNullException.ThrowIfNull(component); ArgumentNullException.ThrowIfNull(attributes); IDesigner? designer = GetDesigner(component); if (designer is IDesignerFilter designerFilter) { designerFilter.PreFilterAttributes(attributes); designerFilter.PostFilterAttributes(attributes); } return designer is not null; } /// <summary> /// Provides a way to filter the events from a component that are displayed to the user. /// </summary> bool ITypeDescriptorFilterService.FilterEvents(IComponent component, IDictionary events) { ArgumentNullException.ThrowIfNull(component); ArgumentNullException.ThrowIfNull(events); IDesigner? designer = GetDesigner(component); if (designer is IDesignerFilter designerFilter) { designerFilter.PreFilterEvents(events); designerFilter.PostFilterEvents(events); } return designer is not null; } /// <summary> /// Provides a way to filter the properties from a component that are displayed to the user. /// </summary> bool ITypeDescriptorFilterService.FilterProperties(IComponent component, IDictionary properties) { ArgumentNullException.ThrowIfNull(component); ArgumentNullException.ThrowIfNull(properties); IDesigner? designer = GetDesigner(component); if (designer is IDesignerFilter designerFilter) { designerFilter.PreFilterProperties(properties); designerFilter.PostFilterProperties(properties); } return designer is not null; } }