在 VB.NET 中设置 WinForms UserControl 的命名空间
-
09-06-2019 - |
题
如何将 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
我们还将项目所在的文件夹命名为与命名空间相同的名称,直至但不包括公司名称(假设所有解决方案都位于公司命名空间中):
\项目
\项目\我的解决方案
\项目\MySolution\控件
- 或者 -
\项目\
\项目\常见
\项目\通用\程序集
\项目\通用\控件
ETC。
希望有帮助...
其他提示
如果您不希望控件位于单独的项目中,则只需将 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
您的意思是您希望能够在运行时(在代码中)通过
[ProjectNamespace].[YourSpecialNamespace].Controls
而不是默认的
[ProjectNamespace].Controls
?因为我不相信这是可能的。如果我没记错的话, Controls
您的项目/应用程序的集合是由框架内置的 - 您无法更改它。正如 camainc 所指出的,您可以使用项目设置窗口(或代码)将控件本身放置在特定的命名空间中:
Namespace [YourSpecialNamespace]
Public Class Form1
[...]
End Class
End Namespace
当然,再考虑一下,我想你可以设计和建造自己的 Controls
命名空间中的集合 - 也许作为内置集合的包装器......