【问题标题】:Setting the namespace of a WinForms UserControl in VB.NET在 VB.NET 中设置 WinForms UserControl 的命名空间
【发布时间】:2008-09-15 13:00:22
【问题描述】:

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

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

编辑以完成问题:我怀疑不可能按照我的要求做,所以 camainc 的答案是最接近的解决方案。

【问题讨论】:

    标签: vb.net winforms namespaces


    【解决方案1】:

    我不确定这是否是您的要求,但我们就是这样做的。

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

    每个解决方案都有一个这样的命名空间:

    [CompanyName].[SolutionName].[ProjectName]
    

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

    OurCompany.ThisSolution.Controls
    

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

    OurCompany.Common.Controls
    

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

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

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

    \项目
    \项目\我的解决方案
    \Projects\MySolution\Controls

    -- 或--

    \项目\
    \项目\通用
    \Projects\Common\Assemblies
    \Projects\Common\Controls

    等等

    希望对您有所帮助...

    【讨论】:

    • 对原始问题的良好解决方案,所以我已经标记了你。但是,它并不能解决我当前的问题,所以我对这个问题添加了一些进一步的说明。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      访问用户控件

      [ProjectNamespace].[YourSpecialNamespace].Controls

      而不是默认的

      [ProjectNamespace].Controls

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

      Namespace [YourSpecialNamespace]

      Public Class Form1

      [...]

      End Class

      End Namespace

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-25
        • 2023-03-29
        • 1970-01-01
        • 2023-04-02
        • 1970-01-01
        相关资源
        最近更新 更多