2009-06-04 18 views
1

継承するBaseFormを作成しています。 BaseFormには、私のアプリケーションのいくつかの基本的な標準コントロールがあります。継承されたwinformコントロールへのアクセスを禁止する

問題は次のとおりです。 継承されたフォームでこのコントロールを使用および変更できますが、フォームから削除することはできません。

最大の問題は、ユーザーが継承したフォームによってタブを追加する必要があるTabControlです。 BaseFormのTabControlの "Modifiers"プロパティをprivateに設定すると、継承されたFormsは新しいタブを追加できなくなります。 BaseFormのTabControlの "修飾子"プロパティをprotectedに設定した場合、フォームを継承するとBaseControlからTabControlが削除されます。

これを中止するには離れていますか?カスタムデザイン?

+0

ビジュアルスタジオでテンプレートフォームを作成できませんか? –

答えて

4

グスタボ、

あなたが継承し、開発者を強制的に経験するだろう問題の山脈のふもと最初の一番下に立っている「基本フォームクラス。」私の経験から、このように構築されたフレームワークは非常に壊れやすく、開発者が使用するのが難しい傾向があります。

私は、TabControlをプライベートにしてから、フォーム自体にパブリック "タブ"プロパティを実装することで、この特定の障害を克服することができると思いますが、この山の頂点に到達し、あなたの前にたくさんの山があります。私はあなたがアプローチを全面的に再考することをお勧めします。

// set the Modifiers property on tabControl1 to "Private" then implement this 
public TabControl.TabPageCollection TabPages 
{ 
    get { return tabControl1.TabPages; } 
} 

継承は、統一的な構成を提供するのではなく、共通の機能を提供するために使用する必要があります。あなたは本当に "コア画面"を実装し、開発者がその画面にコントロールを "プラグ"できるようにフレームワークを設計することを検討すべきです。

Composite UI Application Blockは私が気付いていないより新しい何かがあるかもしれませんが、始めるのに良い場所です。

+0

コメントありがとうございます。 私のプロジェクトはプラグインベースのアプリケーションです。サードパーティの使用は、アドオンによって機能的に追加されます。継承フォームについての私の質問は、私の会社内のプロジェクトを制御することです。 あなたのアイデアは良いですが、私は、継承されたフォームを構築するためにビジュアルデザインを使用したいので、public-properties/private-attributesを試したくありません。 –

+0

それでも動作するはずです。コントロールがプライベートである場合、サブクラス化されたフォームでロックされて表示されます。 –

1

フォームをVisual Studioデザイナー内で "うまく動作する"ようにしたい場合は、親フォームを直接編集しているときにタブコントロールのプライベートが機能することになりますが、子孫を編集しようとします。

私は@Michael Meadowsが自分の答えで正しいと思っています。過去に私が望むものを提供できなかった精巧なフレームワークを自分自身で構築しています。

大まかにあなたが継承と一緒に物事を引っ張って見ているところ、私は構図は、より良いサービスを提供することを信じて、話します。少なくとも、これは私の経験です。

軽量アイディアについては、Jeremy Millersシリーズのブログ投稿Build your own CABをご覧ください。

関連する問題