代码之家  ›  专栏  ›  技术社区  ›  Garry Shutler

在vb.net中设置winforms用户控件的命名空间

  •  0
  • Garry Shutler  · 技术社区  · 17 年前

    如何将用户控件定义为位于项目命名空间下的命名空间中,即[rootnamespace].[subsectionofprogram].controls?

    根据Camainc的回答进行编辑: 我还有一个约束,我必须在一个项目中拥有所有的代码。

    编辑以最终确定问题: 正如我所怀疑的那样,不可能按我的要求去做,所以卡马因克的答案是最接近的解决方案。

    3 回复  |  直到 15 年前
        1
  •  1
  •   camainc    17 年前

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

    我们以一致的方式命名我们所有的项目,用户控件也没有什么不同。我们也使用项目设置窗口命名,尽管您可以通过项目窗口和代码的组合来实现。

    每个解决方案都得到这样的名称空间:

    [CompanyName].[SolutionName].[ProjectName]
    

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

    OurCompany.ThisSolution.Controls
    

    如果我们有可能跨越多个不同解决方案的控件,我们只需要对其进行这样的命名:

    OurCompany.Common.Controls
    

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

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

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

    项目
    \项目\解决方案
    \项目\解决方案\控件

    --或者——

    项目\
    \项目\公用
    \项目\公用\程序集
    \项目\公用\控件

    等。

    希望有帮助…

        2
  •  1
  •   Cody Gray Felix    15 年前

    如果不希望控件位于单独的项目中,可以将命名空间关键字添加到代码文件的顶部。例如,我在几个项目中做过类似的事情:

    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
    
        3
  •  0
  •   Keithius    17 年前

    您的意思是您希望能够在运行时(在代码中)通过

    [ProjectNamespace].[YourSpecialNamespace].Controls

    而不是违约

    [ProjectNamespace].Controls

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

    Namespace [YourSpecialNamespace]

    Public Class Form1

    [...]

    End Class

    End Namespace

    当然,再考虑一下,我想你可以自己设计和建造 控制 名称空间中的集合-可能作为内置名称空间的包装器…