您如何将您的 UserControls 定义为位于项目名称空间下方的名称空间中,即。[RootNameSpace].[SubSectionOfProgram].Controls?
由于 camainc 的回答而进行编辑:我还有一个约束,即我必须将所有代码都放在一个项目中。
编辑以完成问题:因为我怀疑不可能做我需要的事情,所以 camainc 的答案是最接近的解决方案。
您如何将您的 UserControls 定义为位于项目名称空间下方的名称空间中,即。[RootNameSpace].[SubSectionOfProgram].Controls?
由于 camainc 的回答而进行编辑:我还有一个约束,即我必须将所有代码都放在一个项目中。
编辑以完成问题:因为我怀疑不可能做我需要的事情,所以 camainc 的答案是最接近的解决方案。
我不确定这是否是您所要求的,但我们就是这样做的。
我们以一致的方式命名所有项目,用户控件也不例外。我们还使用项目设置窗口命名空间,尽管您可以通过项目窗口和代码的组合来实现。
每个解决方案都有一个这样的命名空间:
[CompanyName].[SolutionName].[ProjectName]
因此,我们的用户控件通常位于名为“Controls”的项目中,该项目的命名空间为:
OurCompany.ThisSolution.Controls
如果我们有可能跨越多个不同解决方案的控件,我们只需像这样命名它:
OurCompany.Common.Controls
然后,在我们的代码中,我们将导入库,或将项目添加到解决方案中。
Imports OurCompany
Imports OurCompany.Common
Imports OurCompany.Common.Controls
我们还将项目所在的文件夹命名为与命名空间相同,直到但不包括公司名称(所有解决方案都假定在公司命名空间中):
\Projects
\Projects\MySolution
\Projects\MySolution\Controls
- 或者 -
\Projects\\
Projects\Common
\Projects\Common\Assemblies
\Projects\Common\Controls
等等
希望有帮助...
如果您不希望控件位于单独的项目中,只需将 Namespace 关键字添加到代码文件的顶部即可。例如,我在几个项目中做过这样的事情:
Imports System.ComponentModel
Namespace Controls
Friend Class FloatingSearchForm
'Your code goes here...
End Class
End Namespace
您将无法指定控件位于不同于为它们所属的项目指定的根命名空间中。VB 将简单地将您为命名空间指定的任何内容附加到项目属性窗口中指定的命名空间。因此,如果您的整个项目是“AcmeCorporation.WidgetProgram”并且您将“Namespace Controls”添加到控件文件的顶部,则该控件将位于命名空间“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
您的意思是您希望能够在运行时(在代码中)通过以下方式访问用户控件
[ProjectNamespace].[YourSpecialNamespace].Controls
而不是默认的
[ProjectNamespace].Controls
? 因为我不相信这是可能的。如果我没记错的话,Controls
你的项目/应用程序的集合是由框架内置的——你不能改变它。正如camainc所指出的,您可以使用项目设置窗口(或代码)将控件本身放置在特定的命名空间中:
Namespace [YourSpecialNamespace]
Public Class Form1
[...]
End Class
End Namespace
当然,再想一想,我想您可以Controls
在命名空间中设计和构建自己的集合 - 也许作为内置集合的包装器......