2010-11-22 17 views
1

私はUIの初心者ですが、私はかなり良いOO開発者です。私はデザイナーと一緒に仕事をする方法については混乱しています。私はWindows Formsアプリケーションを開発しています。私はSystem.Windows.Forms.TabPageから得たコントロール(TabPage)をSystem.Windows.Forms.TabControlコントロールに置いています。Windowsフォームアプリケーションで派生したコントロールを使うにはどうすればいいですか?

public class MyTabPage : TabPage 
{ ... } 

デザイナーに自分のコントロールを使用させる方法がわかりません。

仲間の開発者が私にこれを見て、私が情報を追加することを示唆しました。

私はWinFormsアプリケーションのプロトタイプを作成しました。アプリケーションにはTabControlがあり、3つのタブページがあります。各TabPageは、SplitterControlと、スプリッタの各半分にDataGridViewのコントロールを持っています。 2つのDataGridViewコントロールは、編集する必要のあるデータのマスター詳細ビューを形成します。各DataGridViewコントロールに、ハンドラコードがフォームに配置されるたびに、一連のイベントハンドラを追加しました。フォームはかなり混雑してきていますし、オブジェクトをクリーンアップするためにオブジェクト指向のテクニックを使用したいと考えています。

私はこのプロトタイプを今やり直したいと思いますし、それぞれTabPageが動作上同じであるため、いくつかの複雑さを抽象化するためにOOを使いたいと思います。これは、デザイナーとの私の経験の欠如が来るところです。私の元のプロトタイプよりも複雑なもののためにデザイナーを使用する方法がなければなりません。

答えて

0

これはしばらくしていますが、私はこの質問に答えると思っていました。

コントロールを分割することで、私が望むオブジェクト指向の実装を手に入れることができました。コントロールはプロトタイプとほぼ同じように実装されています。次に、私が必要とする特定の振る舞いを含むために、派生クラスを持つコントロールバインダークラスhirearchyを作成しました。コントロールには、バインダー基本クラスへの参照があり、必要に応じてバインダー機能を呼び出します。導出されたバインダーは、必要に応じてプロパティとメソッドをオーバーライドします。かなり多くの教科書OOソリューション。

私が抱えていたところでは、私はコントロールのヒラリージを持つ必要があると考えていました。

ありがとうございました。私はこの質問をしたときにある程度のプレッシャーの下にいました。それ以来、私は数ヶ月でどれだけ学んだのか驚くほどです。

1

のUserControl

単にあなたのコントロールを含むユーザーコントロールを作成します。その後、Visual Studioのツールボックスウィンドウで使用できます。詳細について

Understanding the User Control Designer ...

ユーザーコントロールは、他 クラスに類似しているが、 に追加能力をツールボックスに配置され、フォーム上 を示しました。

このチュートリアルはVisual Studio 2010とは少し異なりますが、あなたはそれを理解することができます。


のTabPageコントロール

のTabPageコントロールとして、あなたはそれをスタンドアローンデザイナで使用することはできません。これはTabControlの一部でなければなりません。

TabControlは、TabPageコントロールを含むように構築されています。デザイナを使用して任意のTabPageを追加/削除した場合、バックエンドで「new TabPage」を実行すると、TabPageの派生クラスの新しいインスタンスを作成する必要があると判断できません。あなたがのTabPageコントロールを無効にする必要がある理由


AのTabPageは単なるコンテナです

他の提案、私が把握することはできません。私はあなたの質問にいくつかの情報を追加したことを知っていますが、私たちがよりよく理解できるように、もう一度それを再訪しなければならないかもしれません。

TabPageはコンテナなので、SplitContainerとDataGridViewsを含むUserControlを作成する必要があります。したがって、各TabPageでそのUserControlを再利用できるようになります。

デザイナーはUIプログラミングを補完するものであり、必須ではありません。デザイナを使用せずにTabPageにUserControlを追加できます。

私はここでトラック外にいるかもしれません。あなたが必要とする視覚的なプロトタイプが役に立ちます。

+0

私はこの部分を考え出し、素晴らしいと思った。 TabPageから派生したMyTabPageというコントロールを作成しました。デザイナーでMyTabPageを開くと、SplitContainerコントロールとDataGridViewコントロールを追加(および配置)する方法がわかりません。 SplitContainerコントロールで同じことを試みました。同じことが起こった...私は派生したコントロールを編集するためにデザイナーを使用する方法がわかりません。 –

1

残念ながら、あなたの問題を解決する実際の方法はありません。カスタムTabControlも作成して、それを独自のデザイナーに与えて、デフォルトのTabPageクラスの代わりに派生クラスのインスタンスを作成する必要があります。悲しいことに、System.Design.dllのTabControlDesignerクラスは内部であり、派生することはできません。あなたはそれを完全に置き換える必要があります。それは難しいです、それはかなり高度なデザイナーです。リフレクターを使って、何が必要なのかを調べることができます。

+0

実際のUI開発者はどのようにコードを開発していますか?デザイナーは簡単なアプリケーションでは大丈夫だが、物質のアプリケーションには役に立たないようだ。私はそれを買うのが大変だと思う。 –

+1

スピードバンプが1回発生した後ではなく、速やかに解読することができます。 TabPageをカスタマイズすることは非常に珍しく、カスタマイズする必要があるものはあまり役に立ちません。これはコントロールの単なるコンテナです。私は良い答えであなたを助けることができない、あなたはそれをカスタマイズする理由を説明しなかった。 –

+0

それはうまくいきませんでした。私はそれを却下するつもりはない、逆に、私の期待は、私が望むことを行う方法がある可能性があるが、私の経験の欠如は私を悩ますことである。私はより良い意味合いを持つことを望んで、この質問にもっと詳細を加えました。私はTabPageがthederivationを行うのに間違った場所かもしれないと思ったので、私はSplitContainerを派生させてみました。私は何かが欠けている。しかし、答えをありがとう。 –

1

実際にTabPageの動作を変更しているわけではありません。 TabPageとTabControlは密接に結合されており、おそらくそうであるはずです。あなたの "コントロール"は、TabPageに配置する必要があります。だからあなたのユーザーコントロールをスプリッタと2つのdatagridviewsを持つパネルとして定義して、あなたのアプリケーションの各TabPageにユーザコントロールをドロップするだけです。タブコントロール/ページタンデムは引き続き自動的に動作し、カスタムコードは適切なコントロールになります。

関連する問題