Как правильно создать подкласс UserControl таким образом?

1

СЦЕНАРИЙ

У меня есть подклассы 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
  • 1
    Нет необходимости добавлять свой подклассный элемент управления в проект WF Control Lib - они могут отлично работать без дополнительных затрат на UserControl. Net - это «автоматическое создание» UC из-за типа проекта; Вы, очевидно, добавляете свой NUD в Usercontrol. Создайте проект «Class Lib» и добавьте свой подклассный элемент управления вместе с некоторыми ссылками WinForms. Многие, многие, многие подклассы управления работают очень хорошо без «выгоды» UserControl. Я не уверен, о какой «сетке свойств» вы говорите - окно свойств tge std?
  • 0
    Я знаю, как скомпилировать элемент управления так, как вы сказали, без зависимости от UC. Я пытаюсь спросить: когда вы компилируете и запускаете пользовательский элемент управления (проект WF Control Lib), VisualStudio отображает сетку свойств элемента управления во время выполнения, чтобы протестировать свойства элемента управления, что я хочу получить с моим пользовательским элементом управления, который не наследует от UC в проекте WF Control Lib, в случае, если это возможно, я не знаю, спасибо за комментарий.
Показать ещё 4 комментария
Теги:
visual-studio
winforms
user-controls

1 ответ

1
Лучший ответ

Приложение-тест, поставляемый с Visual Studio, будет искать только элементы управления, полученные из UserControl. Если вы хотите, чтобы он мог просматривать/тестировать другие типы, вам необходимо создать собственное приложение.

Следующий код является лишь доказательством концепции. Самый простой способ реализовать полное рабочее приложение - просто отбросить UserControlTestContainer.exe на декомпилятор, такой как отражатель, и скопировать код.

  1. Создайте собственное приложение форм Windows и назовите его UserControlTestContainer.
  2. Создайте общий подзаголовок.
  3. Снимите флажок enable application framework и установите startup object в sub main.
  4. Когда ваш код выглядит как мой, соберите.
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
  1. Замените UserControlTestContainer.exe по умолчанию, расположенный в C:\Program Files (x86)\Microsoft Visual Studio {version}\Common7\IDE с помощью пользовательского UserControlTestContainer.exe.
  2. Назад в библиотеке управления формами окон создает настраиваемый элемент управления, полученный из Control и hit run.

Изображение 174551

Ещё вопросы

Сообщество Overcoder
Наверх
Меню