0

例:

VS を使用して、UserControl から派生した MyControl を作成できます。これには、メンバーまたはプロパティとして一連のデータを追加できます。ビジュアル デザイナーを使用して、MyControl に 2 つのパネルを追加できます。それぞれは、提供するメソッドを使用して、同じデータを異なる形式 (FTSOA では円グラフと棒グラフ) でレンダリングすることを目的としています。

MyControl がこれらのメソッドを使用してパネルを再描画できるようにする方法はいくつかあると思います。

まず、VS を使用して各パネルのペイント イベントを追加します。これは実装が簡単で、メソッドが MyControl クラス内で作成されるので、メソッドが MyControl データにアクセスできるようにします。

次に、各パネルの OnPaint メソッドをオーバーライドします。私の知る限り、これを行うには、関連するクラスを持つパネルごとに UserControl を作成する必要があります。次に、各クラスの OnPaint メソッドをオーバーライドできます。欠点は、各クラスに MyControl データへのアクセスを許可する必要があることです。

第三に、MyControl OnPaint をオーバーライドして各パネルを手動で再描画することも可能ですが (私はこれを行っていません)、グラフィックスなどを取得することは問題です。

質問: (1 & 2) は動作するようにできますが、他の人の意見を知りたいです。

4

1 に答える 1

1

さて、上記のすべて。しかし、Panel コントロールは、ペイント用の非常に優れたコントロールになるように最適化されていませんでした。それは ScrollableControl から派生し、コンテンツをスクロールできるコンテナーであることが本当に得意です。コントロールのグループをすばやく移動する方法としても適しています。またはそれらを非表示にします。またはそれらを無効にします。

絵を描くには理想的ではありません。ダブルバッファリングはしません。これをオンにするには、そこから独自のコントロールを派生させる必要があります。また、コンテナーの動作も最適化します。サイズ変更時に Paint イベントを発生させるには、ControlStyles.ResizeRedraw スタイルをオンにする必要があります。スクロール可能にする必要があるカスタム ペインティングが実際に必要な場合、Panel を派生させるのに適した基本クラスです。

UserControl の OnPaint() メソッドをオーバーライドする必要があるように思えます。コントロールの数を最小限に抑えることは、非常に強力な最適化の目標であり、非常にコストがかかります。

于 2012-08-16T16:46:20.937 に答える