Настройка пространства имен пользовательского элемента управления WinForms в VB.NET

StackOverflow https://stackoverflow.com/questions/62599

  •  09-06-2019
  •  | 
  •  

Вопрос

Как вы определяете свои пользовательские элементы управления как находящиеся в пространстве имен ниже пространства имен project, т.е.[Пространство корневых имен].[Подраздел программы].Элементы управления?

Редактировать из-за ответа camainc: У меня также есть ограничение, что я должен иметь весь код в одном проекте.

Отредактируйте, чтобы доработать вопрос: Как я и подозревал, невозможно сделать то, что мне требовалось, поэтому ответ camainc является ближайшим решением.

Это было полезно?

Решение

Я не уверен, что это то, о чем вы просите, но именно так мы это делаем.

Мы используем имена имен для всех наших проектов согласованным образом, пользовательские элементы управления ничем не отличаются.Мы также используем окно настроек проекта, хотя вы могли бы сделать это с помощью комбинации окна проекта и кода.

Каждое решение получает пространство имен, подобное этому:

[CompanyName].[SolutionName].[ProjectName]

Итак, наши пользовательские элементы управления обычно находятся в проекте под названием "Controls", который будет иметь пространство имен:

OurCompany.ThisSolution.Controls

Если у нас есть элементы управления, которые могут охватывать несколько разных решений, мы просто называем их следующим образом:

OurCompany.Common.Controls

Затем в нашем коде мы импортируем библиотеку или добавим проект в решение.

Imports OurCompany
Imports OurCompany.Common
Imports OurCompany.Common.Controls

Мы также называем папки, в которых находятся проекты, так же, как и пространство имен, вплоть до названия компании, но не включая его (предполагается, что все решения находятся в пространстве имен company).:

\Проекты
\Проекты\Мое решение
\Проекты\MySolution\Элементы управления

-- или --

\Проекты\
\Проекты\Общие
\Проекты\Общие\Сборки
\Проекты\Общие\Элементыуправления

и т.д.

Надеюсь, это поможет...

Другие советы

Если вы не хотите, чтобы элементы управления находились в отдельном проекте, вы можете просто добавить ключевое слово Namespace в начало файла кода.Например, я сделал что-то подобное в нескольких проектах:

Imports System.ComponentModel

Namespace Controls
   Friend Class FloatingSearchForm

      'Your code goes here...

   End Class
End Namespace

Вы не сможете указать, что элементы управления находятся в корневом пространстве имен, отличном от того, которое указано для проекта, частью которого они являются.VB просто добавит все, что вы укажете для пространства имен, в пространство имен, указанное в окне свойств проекта.Итак, если весь ваш проект называется "AcmeCorporation.WidgetProgram" и вы добавляете "Элементы управления пространством имен" в начало файла элемента управления, элемент управления будет находиться в пространстве имен "AcmeCorporation.WidgetProgram.Элементы управления".Невозможно сделать так, чтобы элемент управления отображался в пространстве имен "AcmeCorporation.SomeOtherProgram.Controls".

Также обратите внимание, что если вы используете конструктор для редактирования своих элементов управления, вам необходимо добавить ключевое слово Namespace в скрытый частичный класс, созданный дизайнером.Нажмите кнопку "Показать все файлы" в обозревателе решений, затем нажмите стрелку развернуть рядом с вашим элементом управления.Вы должны увидеть в списке файл "*.Designer.vb".Добавьте также пространство имен в этот файл.Разработчик учтет это изменение, и теперь ваш проект должен скомпилироваться без ошибок.Очевидно, что пространство имен, указанное в частичном классе designer, должно совпадать с тем, которое указано в вашем файле класса!Для приведенного выше примера:

Namespace Controls
   <Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
   Partial Class FloatingSearchForm

      'Designer generated code

   End Class
End Namespace

Вы имеете в виду, что хотите иметь возможность доступа к пользовательским элементам управления во время выполнения (в коде) через

[ProjectNamespace].[YourSpecialNamespace].Controls

вместо того, чтобы по умолчанию

[ProjectNamespace].Controls

?Потому что я не верю, что это возможно.Если я не ошибаюсь, то Controls коллекция вашего проекта / приложения встроена в фреймворк - вы не можете ее изменить.Как отметил camainc, вы можете использовать окно настроек проекта (или код), чтобы поместить сами элементы управления в определенное пространство имен таким образом:

Namespace [YourSpecialNamespace]

Public Class Form1

[...]

End Class

End Namespace

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top