Настройка пространства имен WinForms UserControl в VB.NET - PullRequest
0 голосов
/ 15 сентября 2008

Как вы определяете свои UserControls как находящиеся в пространстве имен ниже пространства имен проекта, т.е. [RootNameSpace]. [SubSectionOfProgram] .Controls

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

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

Ответы [ 3 ]

1 голос
/ 11 октября 2010

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

Imports System.ComponentModel

Namespace Controls
   Friend Class FloatingSearchForm

      'Your code goes here...

   End Class
End Namespace

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

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

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

      'Designer generated code

   End Class
End Namespace
1 голос
/ 15 сентября 2008

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

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

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

[CompanyName].[SolutionName].[ProjectName]

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

OurCompany.ThisSolution.Controls

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

OurCompany.Common.Controls

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

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

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

\ Проекты
\ Проекты \ MySolution
\ Проекты \ MySolution \ Controls

- или -

\ Проекты \
\ Projects \ Common
\ Проекты \ Common \ Сборки
\ Projects \ Common \ Controls

и т.д.

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

0 голосов
/ 15 сентября 2008

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

[ProjectNamespace].[YourSpecialNamespace].Controls

вместо значения по умолчанию

[ProjectNamespace].Controls

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

Namespace [YourSpecialNamespace]

Public Class Form1

[...]

End Class

End Namespace

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...