СЦЕНАРИЙ
У меня есть подклассы NumericDown:
Public Class MyNumericUpDown : Inherits NumericUpDown
' More code here that does not matter...
End Class
Я хотел бы скомпилировать его как UserControl
проекта библиотеки WindowsForms Control Library, чтобы получить выгоду от сетки свойств UserControl при отладке проекта.
ПРОБЛЕМА
Я не могу найти способ скомпилировать свой NumericDown, как я хочу, не нарушая автоматически созданный класс Usercontrol
проекта библиотеки WindowsForms Control Library, это означает, что он разбивает функцию сетки свойств и после компиляции проекта, имеющего окончательное сообщение об исключении, сообщающее мне, что my dll: doesn't contain any UserControl types
(но на самом деле есть, и я могу добавить его в панель управления VS).
ВОПРОС
В С# или VB, как я могу правильно выполнить проект библиотеки WindowsForms Control Library, чтобы показать только мой пользовательский NumericDown, не потеряв функцию grid?
Надеюсь, ты сможешь понять, чего я хочу.
Я попытаюсь сказать это другими словами: я только хотел бы проверить свой NumericUpDown в сетке свойств, а не на usercontrol, сгенерированный по умолчанию проектом библиотеки WindowsForms Control Library.
Он должен быть "единицей" при добавлении dll в панель инструментов управления VisualStudio, но вместо этого я получаю два отдельных элемента управления.
КОД:
Мне нечего показывать, потому что я не могу найти информацию, чтобы начать делать это.
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
Приложение-тест, поставляемый с 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
и hit run.