在VB.NET中设置WinForms UserControl的命名空间

时间:2008-09-15 13:00:22

标签: vb.net winforms namespaces

如何将UserControl定义为位于项目命名空间下方的命名空间中,即。 [RootNameSpace] [SubSectionOfProgram] .Controls?

编辑由于camainc的回答:我还有一个约束,我必须在一个项目中拥有所有代码。

编辑以完成问题:我怀疑我无法按照要求执行操作,因此camainc的答案是最近的解决方案。

3 个答案:

答案 0 :(得分:1)

我不确定这是不是你问的问题,但我们就是这样做的。

我们以一致的方式命名所有项目,用户控件也不例外。我们还使用项目设置窗口命名空间,尽管您可以通过项目窗口和代码的组合来完成。

每个解决方案都会获得如下命名空间:

[CompanyName].[SolutionName].[ProjectName]

因此,我们的用户控件通常位于名为“Controls”的项目中,该项目的命名空间为:

OurCompany.ThisSolution.Controls

如果我们有可能跨越多个不同解决方案的控件,我们就像这样命名它:

OurCompany.Common.Controls

然后,在我们的代码中,我们将导入库,或将项目添加到解决方案中。

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

我们还将项目所在的文件夹命名为命名空间,直到但不包括公司名称(假设所有解决方案都在公司名称空间中):

\项目
\项目\ MySolution
\项目\ MySolution \控件

- 或 -

\项目\
\项目\共同
\项目\ COMMON \组件
\项目\共同\控件

希望有帮助...

答案 1 :(得分:1)

如果您不希望控件位于单独的项目中,则只需将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

答案 2 :(得分:0)

您是否希望能够通过

在运行时(代码中)访问用户控件
  

[ProjectNamespace].[YourSpecialNamespace].Controls

而不是

的默认值
  

[ProjectNamespace].Controls

?因为我不相信这是可能的。如果我没弄错的话,你的项目/应用程序的Controls集合是由框架内置的 - 你无法改变它。正如camainc所说,您可以使用项目设置窗口(或代码)将控件本身放置在特定的命名空间中:

  

Namespace [YourSpecialNamespace]

     

Public Class Form1

     

[...]

     

End Class

     

End Namespace

当然,再考虑一下,我想你可以在命名空间中设计和构建自己的Controls集合 - 也许作为内置函数的包装器......