セットアップは比較的簡単です。多数のコンポーネント、いくつかのテキストボックス、およびリストビューを含むカスタムユーザーコントロールがあります。
デザイナでは、他のコントロールをユーザーコントロールにドラッグアンドドロップして、ユーザーコントロールインスタンスに追加できます。これは欲しくない。
「このユーザーコントロールに追加のコントロールを追加できないようにする」と明示的に言うにはどうすればよいですか?
セットアップは比較的簡単です。多数のコンポーネント、いくつかのテキストボックス、およびリストビューを含むカスタムユーザーコントロールがあります。
デザイナでは、他のコントロールをユーザーコントロールにドラッグアンドドロップして、ユーザーコントロールインスタンスに追加できます。これは欲しくない。
「このユーザーコントロールに追加のコントロールを追加できないようにする」と明示的に言うにはどうすればよいですか?
それはそれが機能する方法ではありません。ユーザー コントロールをフォームにドロップした場合、フォームへのコントロールの追加はサポートされていません。それには特別なデザイナーが必要です。この回答は、何が必要かを示しています。コントロールが追加されたように見えるかもしれませんが、それらは単にユーザー コントロールと重なっているだけです。彼らの親はまだフォームです。
プログラマーがユーザー コントロール クラス自体をデザイナーで開くと、もちろん、好きなようにコントロールを追加できます。これを止める唯一の方法は、ソース コードを出荷せず、sealedキーワードを使用してそこからの派生を防ぐことです。
ブール値のプロパティMyContainer.DisableAddControls
などを作成できます。
あなたMyContainer.Controls.Add(..)
がオーバーライドされた場合Add()
、次のようにそのメソッドでカスタム例外をスローできます。
if(DisableAddControls)
{
throw new DisableAddControlsException();
}
そのメソッドを から直接継承している場合はContainerControl
、イベントを処理してControlAdded
そこで例外をスローできます。
myContainer.ControlAdded += myContainerControlAdded;
private void Control_Added(object sender, System.Windows.Forms.ControlEventArgs e)
{
if(DisableAddControls)
{
throw new DisableAddControlsException();
}
}
よく考えてみると、これは設計時に設計者を追い出すことはありません...気にしないでください。