| File: System\ComponentModel\Design\DesignerActionMethodItem.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.Reflection; namespace System.ComponentModel.Design; public class DesignerActionMethodItem : DesignerActionItem { private readonly DesignerActionList? _actionList; private MethodInfo? _methodInfo; public DesignerActionMethodItem( DesignerActionList? actionList, string? memberName, string? displayName, string? category, string? description, bool includeAsDesignerVerb) : base(displayName, category, description) { _actionList = actionList; MemberName = memberName; IncludeAsDesignerVerb = includeAsDesignerVerb; } public DesignerActionMethodItem( DesignerActionList? actionList, string? memberName, string? displayName) : this( actionList, memberName, displayName, category: null, description: null, includeAsDesignerVerb: false) { } public DesignerActionMethodItem( DesignerActionList? actionList, string? memberName, string? displayName, bool includeAsDesignerVerb) : this( actionList, memberName, displayName, category: null, description: null, includeAsDesignerVerb) { } public DesignerActionMethodItem( DesignerActionList? actionList, string? memberName, string? displayName, string? category) : this( actionList, memberName, displayName, category, description: null, includeAsDesignerVerb: false) { } public DesignerActionMethodItem( DesignerActionList? actionList, string? memberName, string? displayName, string? category, bool includeAsDesignerVerb) : this( actionList, memberName, displayName, category, description: null, includeAsDesignerVerb) { } public DesignerActionMethodItem( DesignerActionList? actionList, string? memberName, string? displayName, string? category, string? description) : this( actionList, memberName, displayName, category, description, includeAsDesignerVerb: false) { } public virtual string? MemberName { get; } public IComponent? RelatedComponent { get; set; } public virtual bool IncludeAsDesignerVerb { get; } public virtual void Invoke() { if (MemberName is null) { throw new InvalidOperationException(); } _methodInfo ??= _actionList?.GetType()?.GetMethod(MemberName, BindingFlags.Default | BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); if (_methodInfo is null) { throw new InvalidOperationException(string.Format(SR.DesignerActionPanel_CouldNotFindMethod, MemberName)); } _methodInfo.Invoke(_actionList, null); } // this is only use for verbs so that a designer action method item can // be converted to a verb. Verbs use an EventHandler to call their invoke // so we need a way to translate the EventHandler Invoke into ou own Invoke internal void Invoke(object? sender, EventArgs args) { Invoke(); } }