1

継承するBaseFormを作成しています。BaseFormには、アプリケーションの基本的な標準コントロールがいくつかあります。

問題は、継承されたフォームがこのコントロールを使用および変更できるようにしたいが、フォームからそれらを削除したくないということです。

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

これを止める方法はありますか?カスタムデザイン?

4

2 に答える 2

4

グスタボ、

あなたは、開発者に「基本フォームクラス」からの継承を強制することによって経験する問題の山岳地帯の最初の丘陵地帯の底に立っています。私の経験から、この方法で構築されたフレームワークは非常に壊れやすく、開発者が使用するのが難しい傾向があります。

TabControlをプライベートにしてから、フォーム自体にパブリックの「Tabs」プロパティを実装することで、この特定の障害を克服できると思いますが、この山の頂上に到達して、多くのことがあることに気付くでしょう。あなたの前にある他のさらに高い山々。アプローチを完全に再考することをお勧めします。

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

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

コンポジットUIアプリケーションブロックは、開始するのに適した場所ですが、私が気付いていない最近の何かがあるかもしれません。

于 2009-06-04T21:31:46.090 に答える
1

Visual Studioデザイナー内でフォームを「適切に」動作させたい場合は、運が悪いです。親フォームを直接編集しているときはタブコントロールをプライベートにすることはできますが、子孫を編集しようとすると失敗します。 。

@Michael Meadowsは、彼の答えが正しいと信じています。過去に自分で精巧なフレームワークを構築したことがありますが、私が望んでいたものを提供できませんでした。

大まかに言えば、継承と一緒に物事をまとめることを検討している場合、構成はより良いサービスを提供すると私は信じています。少なくとも、これは私の経験です。

軽量のアイデアについては、JeremyMillersシリーズのブログ投稿をご覧ください。独自のCABを作成してください。優れた資料がたくさんあります。

于 2009-06-05T03:43:22.470 に答える