| File: System\Windows\Forms\Design\PropertyTab.cs | Web Access |
| Project: src\winforms\src\System.Windows.Forms\System.Windows.Forms.csproj (System.Windows.Forms) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System.ComponentModel; using System.Drawing; namespace System.Windows.Forms.Design; /// <summary> /// Provides a base class for property tabs. /// </summary> /// <remarks> /// <para> /// The <see cref="PropertyTab"/> class provides the base class behavior for a property tab. Property tabs are /// displayed on the toolbar of the <see cref="PropertyGrid"/> control of the Properties window, and allow a /// component to display different views of its properties or other data. /// </para> /// <para> /// User code will usually not create an instance of a <see cref="PropertyTab"/> directly. Instead, a /// <see cref="PropertyTabAttribute"/> that indicates the type of the property tab or property tabs to display /// for a component can be associated with the properties or types that the <see cref="PropertyTab"/> should be /// displayed for. /// </para> /// <para> /// The <see cref="PropertyGrid"/> will instantiate a <see cref="PropertyTab"/> of the type specified by a /// <see cref="PropertyTabAttribute"/> associated with the type or property field of the component that is /// being browsed. /// </para> /// </remarks> public abstract class PropertyTab : IExtenderProvider { private Bitmap? _bitmap; private bool _checkedBitmap; /// <summary> /// Gets the bitmap that is displayed for the <see cref="PropertyTab"/>. /// </summary> public virtual Bitmap? Bitmap { get { if (!_checkedBitmap && _bitmap is null) { try { _bitmap = ScaleHelper.GetIconResourceAsBestMatchBitmap( GetType(), GetType().Name, ScaleHelper.SystemIconSize); } catch (Exception) { } _checkedBitmap = true; } return _bitmap; } } /// <summary> /// Gets or sets the array of components the property tab is associated with. /// </summary> public virtual object[]? Components { get; set; } /// <summary> /// Gets or sets the name for the property tab. /// </summary> public abstract string? TabName { get; } /// <summary> /// Gets or sets the help keyword that is to be associated with this tab. /// </summary> /// <remarks> /// <para>This defaults to the tab name.</para> /// </remarks> public virtual string? HelpKeyword => TabName; /// <summary> /// Gets a value indicating whether this <see cref="PropertyTab"/> can display properties for the /// specified <paramref name="extendee"/>. /// </summary> public virtual bool CanExtend(object? extendee) => true; public virtual void Dispose() { Dispose(true); GC.SuppressFinalize(this); } protected virtual void Dispose(bool disposing) { if (disposing) { _bitmap?.Dispose(); _bitmap = null; } } ~PropertyTab() => Dispose(disposing: false); /// <summary> /// Gets the default property of the specified <paramref name="component"/>. /// </summary> public virtual PropertyDescriptor? GetDefaultProperty(object component) => TypeDescriptor.GetDefaultProperty(component); /// <summary> /// Gets the properties of the specified <paramref name="component"/>. /// </summary> public virtual PropertyDescriptorCollection? GetProperties(object component) => GetProperties(component, attributes: null); /// <summary> /// Gets the properties of the specified <paramref name="component"/> which match the specified /// <paramref name="attributes"/>. /// </summary> public abstract PropertyDescriptorCollection? GetProperties(object component, Attribute[]? attributes); /// <summary> /// Gets the properties of the specified <paramref name="component"/> that match the specified /// <paramref name="attributes"/> and <paramref name="context"/>. /// </summary> public virtual PropertyDescriptorCollection? GetProperties( ITypeDescriptorContext? context, object component, Attribute[]? attributes) => GetProperties(component, attributes); }