【问题标题】:How to Use Visual Studio Resource Selector Dialog in Custom Designer如何在自定义设计器中使用 Visual Studio 资源选择器对话框
【发布时间】:2017-09-16 18:49:05
【问题描述】:

将 .NET 4.0 与 Visual Studio 2017 和 Visual Basic .NET(也可以在 C# 中完成)一起使用,我创建了一个 WinForms 应用程序。作为应用程序的一部分,我通过添加一个新类并从 System.Windows.Forms.Control 继承来创建了一个自定义控件

Public Class MyControl
    Inherits System.Windows.Forms.Control
End Class

如果我将自定义控件添加到表单,我可以使用属性窗口添加 BackgroundImage。在属性窗口中,如果我单击 BackgroundImage 属性,它会显示一个省略号按钮。单击该按钮将打开一个选择资源对话框窗口。

我现在通过继承 System.Windows.Forms.Design.ControlDesigner 为控件创建了一个自定义设计器。我还创建了在设计视图中双击控件时弹出的设计器表单。在设计器表单上,我希望能够使用上面显示的 Visual Studio 中相同的“选择资源”对话框来选择背景图像。我一直无法找到选择资源对话框所在的位置。我怀疑是在以下程序集中,但我没有找到它。

Microsoft.VisualStudio.Design.dll

谁能告诉我 Visual Studio 使用的“选择资源”对话框的完全限定命名空间以及它存在于哪个程序集中?

【问题讨论】:

  • 对话框属于属性的UiTypeEditor。您可以在设计时使用代码显示所有属性的属性编辑器。有关更多信息,请阅读下面的答案。

标签: c# .net vb.net winforms windows-forms-designer


【解决方案1】:

您可以在设计时使用代码显示所有属性的属性编辑器。为此,您可以在System.Design 程序集中找到内部EditorServiceContext,然后通过传递您的控件设计器、要编辑的控件和要编辑的属性名称来调用其EditValue 方法。

示例

您可以在此存储库中找到完整的源代码,例如:

示例的核心部分是设计器类:

using System.ComponentModel.Design;
using System.Linq;
using System.Windows.Forms.Design;
public class MyControlDesigner : ControlDesigner
{
    DesignerVerbCollection verbs;
    public override DesignerVerbCollection Verbs
    {
        get
        {
            if (verbs == null)
            {
                verbs = base.Verbs;
                verbs.Add(new DesignerVerb("Show Select Resource", 
                    (s, e) => ShowSelectResource()));
            }
            return verbs;
        }
    }
    public void ShowSelectResource()
    {
        var editorServiceContext = typeof(ControlDesigner).Assembly.GetTypes()
            .Where(x => x.Name == "EditorServiceContext").FirstOrDefault();
        var editValue = editorServiceContext.GetMethod("EditValue",
            System.Reflection.BindingFlags.Static |
            System.Reflection.BindingFlags.Public);
        editValue.Invoke(null, new object[] { this, this.Component, "SomeProperty" });
    }
}

【讨论】:

  • 我相信这正是您所需要的。如果您对答案有任何疑问,请告诉我...
猜你喜欢
  • 1970-01-01
  • 2016-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-09
  • 1970-01-01
相关资源
最近更新 更多