SCENARIO
我有一个子类化的NumericDown:
Public Class MyNumericUpDown : Inherits NumericUpDown
' More code here that does not matter...
End Class
我想将其编译为 WindowsForms控件库项目的UserControl
,以便在调试项目时获得UserControl属性网格的优势。
问题
我无法在不破坏 WindowsForms控件库项目的自动生成的Usercontrol
类的情况下找到编译我的NumericDown的方法,这意味着打破了属性网格功能和编译项目后有一个最后的异常消息,告诉我我的DLL:doesn't contain any UserControl types
(但确实有,我可以将它添加到VS控件工具箱中)。
问题
在C#或VB中,我如何正确地将 WindowsForms控件库项目设置为仅显示我的自定义NumericDown而不会丢失属性网格功能?
我希望你能理解我想要的东西。
我会试着用其他的话来说:我只想在属性网格中测试我的NumericUpDown,而不是默认由 WindowsForms控件库项目生成的用户控件。
将dll添加到VisualStudio控件工具箱中应该是一个“单位”,而是我得到两个独立的控件。
CODE:
我没有更好的展示,因为我无法找到信息来开始这样做。
Public Class UserControl1 : Inherits UserControl
Public Sub New()
InitializeComponent()
' This is not what I want,
' or at least I think it shouldn't be done as normally like this,
' I only want to use and see my custom NumericUpDown on the property grid,
' not depending on any UserControl ControllCollection.
Me.Controls.Add(New MyNumericUpDown)
End Sub
End Class
答案 0 :(得分:1)
Visual Studio附带的测试应用程序仅搜索从UserControl派生的控件。如果您希望它能够查看/测试其他类型,那么您需要创建一个自定义应用程序。
以下代码只是概念证明。实现完整工作应用程序的最简单方法是简单地将UserControlTestContainer.exe
放到像反射器这样的反编译器上并复制代码。
UserControlTestContainer
。enable application framework
并将startup object
设置为sub main
。Public Class Form1
Public Sub New(Optional ByVal args As String() = Nothing)
Me.InitializeComponent()
Me.args = New Label With {.Dock = DockStyle.Fill, .Text = If((args Is Nothing), "(null)", String.Join(Environment.NewLine, args))}
Me.Controls.Add(Me.args)
End Sub
<STAThread()>
Public Shared Sub Main(Optional ByVal args As String() = Nothing)
Application.EnableVisualStyles()
Application.Run(New Form1(args))
End Sub
Private args As Label
End Class
UserControlTestContainer.exe
替换C:\Program Files (x86)\Microsoft Visual Studio {version}\Common7\IDE
中的默认UserControlTestContainer.exe
。Control
并点击运行的自定义控件。