5

セットアップは比較的簡単です。多数のコンポーネント、いくつかのテキストボックス、およびリストビューを含むカスタムユーザーコントロールがあります。

デザイナでは、他のコントロールをユーザーコントロールにドラッグアンドドロップして、ユーザーコントロールインスタンスに追加できます。これは欲しくない。

「このユーザーコントロールに追加のコントロールを追加できないようにする」と明示的に言うにはどうすればよいですか?

再生

4

2 に答える 2

3

それはそれが機能する方法ではありません。ユーザー コントロールをフォームにドロップした場合、フォームへのコントロールの追加はサポートされていません。それには特別なデザイナーが必要です。この回答は、何が必要かを示しています。コントロールが追加されたように見えるかもしれませんが、それらは単にユーザー コントロールと重なっているだけです。彼らの親はまだフォームです。

プログラマーがユーザー コントロール クラス自体をデザイナーで開くと、もちろん、好きなようにコントロールを追加できます。これを止める唯一の方法は、ソース コードを出荷せず、sealedキーワードを使用してそこからの派生を防ぐことです。

于 2012-08-13T15:52:47.853 に答える
0

ブール値のプロパティ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();
    }
}

よく考えてみると、これは設計時に設計者を追い出すことはありません...気にしないでください。

于 2012-08-13T15:31:32.137 に答える