2016-11-08 12 views
0

私は、複数のTabControlタブを持つWinFormsフォームを持っています。各タブページにユーザーコントロールを追加することにより、タブページの機能を実装します。これにより、巨大なFormクラスの問題に直面するのではなく、各ページの機能をクラスに分けることができます。強制派生クラスで特定のメソッドを実装する

また、共通の機能とアプリケーションパラメータへの参照を提供するために、タブページベースクラスを定義しました。したがって、継承はUserControl - > PagesBase - > MyPage1(MyPage2など)です。提供されたPagesBaseは抽象ではありませんが、これはすべてうまくいきます。私は通常、VS2012内の個々のページをデザインすることができます。

しかし、各ページに小さな(共通の)メソッドとプロパティのセットを実装したいと考えています。最初の考えは、抽象的なPagesBaseクラスを使用することでした。残念ながら、VSの個々のページデザイナーは、PagesBaseのインスタンスを作成する必要があると不平を言って開始しませんでした。

次に、PagesBaseにインターフェイスを適用することを考えました。しかし、これは、PagesBaseにすべての一般的なメソッドなどを定義させ、派生したMyPageNクラスで使用できるようになり、独自のメソッドを定義する必要がなくなるため、機能しません。 Interfaceでは、それらを基底クラスでプライベートとして定義することはできません。

ページを追加して共通のインターフェイスから直接派生する(ただし、これを実行できない)か、またはページがオーバーライドされていない基本クラスメソッドと呼ばれる場合はランタイム例外を発生させることを期待しています(コンパイル時の警告)。

明らかなものがありませんか?どのようなアイデアをしてください?

+0

純粋な仮想メソッドを試しましたか? –

+1

あなたは仮想としてPagesBaseであなたのメソッドを宣言することができ、メソッドがチリページクラスでオーバーライドされない場合に実行時例外を取得するために例外がスローされます。 –

+0

@ThomasMatthews:そうです。それは、「抽象的なPagesBaseクラスを使用する」と言いました。問題は、Visual StudioのGUIデザイナーが "PagesBase"オブジェクトを作成したいということです。 –

答えて

0

通常、フォームデザイナーとはうまくやっていない点を除いて、抽象的なPagesBaseクラス(純粋な仮想関数を使用)が良い方法です(デザイナーの仕組みがわからないことに注意してください)。あなたのPagesBaseクラスはありません、純粋仮想関数と具象クラスだろう

  • :あなたは何ができるか

    は2つの部分にあなたのクラスを分割しています。

  • PagesBaseはMyPageIntfへのポインタを保持します。
  • MyPageIntfは、ページインターフェイスを定義する抽象クラスです。
  • MyPage1、MyPage2などは、MyPageIntfから派生します。
  • MyPageIntfインターフェイスを使用して、PagesBaseで関数を実装します。
  • デザイナーがこれらの関数(MyPageIntfインターフェイスを使用して実装したもの)を呼び出す場合、nullptrのクラッシュを防ぐために、PagesBaseコンストラクタでMyPageIntfポインタを何らかのデフォルトを提供するオブジェクトに設定する必要がありますインタフェースの実装。
0

デフォルトのコンストラクタ(パラメータなし)を追加しようとしましたが、実際の実装(つまり、MyPage1/MyPage2 /など)に置き換えると、あなたのPagesBaseクラスに?それはデザイナーがそれを表現するために期待しているものかもしれません。

関連する問題