VB.NET での WinForms UserControl の名前空間の設定
-
09-06-2019 - |
質問
UserControls をプロジェクト名前空間の下の名前空間に存在するように定義するにはどうすればよいですか。[ルート名スペース].[プログラムのサブセクション].コントロール?
camaincの回答により編集します: また、すべてのコードを 1 つのプロジェクトに含める必要があるという制約もあります。
編集して質問を完成させます: 私が必要としたことを行うことは不可能ではないかと思ったので、camaincの答えが最も近い解決策です。
解決
これがあなたの質問なのかどうかわかりませんが、これが私たちのやり方です。
私たちはすべてのプロジェクトに一貫した方法で名前空間を付けており、ユーザー コントロールも例外ではありません。また、プロジェクト設定ウィンドウを使用して名前空間を設定しますが、プロジェクト ウィンドウとコードを組み合わせて行うこともできます。
各ソリューションは次のような名前空間を取得します。
[CompanyName].[SolutionName].[ProjectName]
したがって、ユーザー コントロールは通常、「Controls」という名前のプロジェクト内にあり、その名前空間は次のようになります。
OurCompany.ThisSolution.Controls
複数の異なるソリューションにまたがるコントロールがある場合は、次のように名前空間を設定します。
OurCompany.Common.Controls
次に、コード内でライブラリをインポートするか、プロジェクトをソリューションに追加します。
Imports OurCompany
Imports OurCompany.Common
Imports OurCompany.Common.Controls
また、プロジェクトが存在するフォルダーには、会社名を含まない名前まで、名前空間と同じ名前を付けます (すべてのソリューションは会社の名前空間にあると想定されます)。
\プロジェクト
\プロジェクト\MySolution
\プロジェクト\MySolution\コントロール
- または -
\プロジェクト\
\プロジェクト\共通
\プロジェクト\共通\アセンブリ
\プロジェクト\共通\コントロール
等
お役に立てば幸いです...
他のヒント
コントロールを別のプロジェクトに含めたくない場合は、コード ファイルの先頭に 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
実行時に(コード内で)ユーザー コントロールにアクセスできるようにしたいということですか?
[ProjectNamespace].[YourSpecialNamespace].Controls
デフォルトではなく、
[ProjectNamespace].Controls
?それは不可能だと信じているからです。私の記憶が間違っていなければ、 Controls
プロジェクト/アプリのコレクションはフレームワークによって組み込まれており、変更することはできません。camainc が指摘したように、プロジェクト設定ウィンドウ (またはコード) を使用して、コントロール自体を特定の名前空間に配置できます。
Namespace [YourSpecialNamespace]
Public Class Form1
[...]
End Class
End Namespace
もちろん、もう少し考えてみると、自分で設計して構築することもできると思います。 Controls
名前空間内のコレクション - おそらく組み込みのもののラッパーとして...