用户控件属性,在设计时显示所有表单的列表

问题描述 投票:2回答:1

众所周知,使用Form.cs文件创建的表单

我具有Form类型的属性

示例:public Form TargetForm {get;set;}

我不需要使用Activiator.CreateInstance()创建表单我只需要从Forms.cs文件中选择一个表单,并将其附加到TargetForm的属性中即可。

请参见屏幕截图http://prntscr.com/pmuxdd

我想可能对读者有用的提示:TypeDescriptors,属性可能会返回Visual Studio解决方案中的类列表。

众所周知,ComponentModel API很难处理。所以请不要为此感到难过。

c# .net winforms user-controls windows-forms-designer
1个回答
1
投票

有两种服务可以在设计时帮助您发现和解决解决方案中的所有类型:

  • ITypeDiscoveryService在设计时发现可用的类型。

  • ITypeDiscoveryService提供一个接口来检索程序集或按名称键入。

另一方面,要在属性编辑器的下拉列表中显示标准值,则可以创建ITypeResolutionService

  • ITypeResolutionService提供一种将值的类型转换为其他类型以及访问标准值和子属性的统一方法。

了解上述选项,您可以创建一个自定义类型转换器,以发现项目中的所有表单类型并在下拉列表中列出。

示例

在下面的示例中,我创建了一个自定义按钮类,该类允许您选择设计类型的表单类型,然后在运行时,如果您单击该按钮,它将所选表单显示为对话框:

TypeConverter

要查看此答案的VB.NET版本,请参阅TypeConverter

MyButton

TypeConverter

FormTypeConverter

enter image description here
© www.soinside.com 2019 - 2024. All rights reserved.