将.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使用的“选择资源”对话框的完全限定名称空间以及它所在的程序集吗?
答案 0 :(得分:0)
您可以使用代码在设计时显示所有属性的属性编辑器。为此,您可以找到EditorServiceContext
程序集中的内部System.Design
,然后通过将您的控件设计器,要编辑的控件和属性名称传递给它来调用其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" });
}
}