簡體   English   中英

在 VB.NET 中設置 WinForms UserControl 的命名空間

[英]Setting the namespace of a WinForms UserControl in VB.NET

您如何將您的 UserControls 定義為位於項目名稱空間下方的名稱空間中,即。 [RootNameSpace].[SubSectionOfProgram].Controls?

由於 camainc 的回答而進行編輯:我還有一個約束,即我必須將所有代碼都放在一個項目中。

編輯以完成問題:因為我懷疑不可能做我需要的事情,所以 camainc 的答案是最接近的解決方案。

如果您不希望控件位於單獨的項目中,只需將 Namespace 關鍵字添加到代碼文件的頂部即可。 例如,我在幾個項目中做過這樣的事情:

Imports System.ComponentModel

Namespace Controls
   Friend Class FloatingSearchForm

      'Your code goes here...

   End Class
End Namespace

您將無法指定控件位於不同於為它們所屬的項目指定的根命名空間中。 VB 將簡單地將 append 指定為項目屬性 window 中指定的命名空間。 因此,如果您的整個項目是“AcmeCorporation.WidgetProgram”並且您將“Namespace Controls”添加到控件文件的頂部,則該控件將位於命名空間“AcmeCorporation.WidgetProgram.Controls”中。 無法使控件出現在“AcmeCorporation.SomeOtherProgram.Controls”命名空間中。

另請注意,如果您使用設計器編輯控件,則需要在設計器創建的隱藏部分 class 中添加 Namespace 關鍵字。 單擊解決方案資源管理器中的“顯示所有文件”按鈕,然后單擊控件旁邊的展開箭頭。 您應該會看到列出的“*.Designer.vb”文件。 將命名空間也添加到該文件中。 設計者將尊重此修改,您的項目現在應該可以無錯誤地編譯。 顯然,設計器部分 class 中指定的命名空間必須與 class 文件中指定的命名空間相同: 對於上面的示例:

Namespace Controls
   <Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
   Partial Class FloatingSearchForm

      'Designer generated code

   End Class
End Namespace

我不確定這是否是您所要求的,但我們就是這樣做的。

我們以一致的方式命名所有項目,用戶控件也不例外。 我們還使用項目設置 window 命名空間,盡管您可以通過項目 window 和代碼的組合來實現。

每個解決方案都有一個這樣的命名空間:

[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

等等

希望有幫助...

您的意思是您希望能夠在運行時(在代碼中)通過以下方式訪問用戶控件

[ProjectNamespace].[YourSpecialNamespace].Controls

而不是默認的

[ProjectNamespace].Controls

? 因為我不相信這是可能的。 如果我沒記錯的話,您的項目/應用程序的Controls集合是框架內置的 - 您無法更改它。 正如camainc所指出的,您可以使用項目設置 window (或代碼)將控件本身放置在特定的命名空間中:

Namespace [YourSpecialNamespace]

Public Class Form1

[...]

End Class

End Namespace

當然,再想一想,我想您可以在命名空間中設計和構建自己的Controls集合 - 也許作為內置集合的包裝器......

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM