2008-09-15 21 views
0

如何將UserControls定義爲位於項目命名空間下的命名空間中,即, [RootNameSpace] [SubSectionOfProgram] .Controls?在VB.NET中設置WinForms UserControl的命名空間

編輯由於camainc的回答:我也有一個約束,我必須在一個單一的項目中的所有代碼。

編輯完成的問題:正如我懷疑這是不可能做我所要求的,所以camainc的答案是最接近的解決方案。

回答

1

我不確定這是你問的問題,但這是我們如何去做的。

我們以一致的方式命名我們的所有項目,用戶控件也沒有什麼不同。我們還使用項目設置窗口命名空間,儘管您可以通過組合項目窗口和代碼來完成。

每個解決方案都得到這樣的命名空間:

[CompanyName].[SolutionName].[ProjectName] 

所以,我們的用戶控件通常是在一個名爲「控制」,這將有一個命名空間:

OurCompany.ThisSolution.Controls 

如果我們有控制可能跨越幾個不同的解決方案,我們只是命名空間它像這樣:

OurCompany.Common.Controls 

然後,在我們的代碼中,我們將導入庫,或將項目添加到解決方案。

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

我們也命名在項目現場一樣的命名空間,向下但不包括公司名稱(所有的解決方案被認爲是在該公司的命名空間)的文件夾:

\項目
\項目\ MySolution
\項目\ MySolution \控制

- 或 -

\項目\
\項目\共同
\項目\ COMMON \大會
\項目\ COMMON \控制

希望幫助...

+0

很好地解決了原來的問題,所以我已經標記了你。但是,這並沒有解決我目前的問題,所以我已經爲這個問題添加了一些進一步的說明。 – 2008-09-15 13:28:08

0

你的意思是你希望能夠通過

[ProjectNamespace].[YourSpecialNamespace].Controls

在運行時(在代碼中)來訪問用戶控件,而不是

[ProjectNamespace].Controls

默認

?因爲我不相信這是可能的。如果我沒有弄錯,你的項目/應用程序的集合是由框架內置的 - 你不能改變它。你可以像camainc指出,使用項目設置窗口(或者代碼),以將控制自己在特定的命名空間正是如此:

Namespace [YourSpecialNamespace]

Public Class Form1

[...]

End Class

End Namespace

當然,考慮這個問題多一些,我想你可以設計並建立自己的Controls收集您的命名空間 - 也許作爲一個包裝內置一個...

1

如果你不」要讓控件位於單獨的項目中,只需將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