2009-05-08 6 views
1

私はカスタムコントロールを持っています:それはSystem.Windows.Forms.Controlをサブクラス化するマネージコードです。編集、コンボなどの標準コントロールを書き直しますか?

編集ボックス、選択リスト、コンボボックス、ラジオボタンなどをこのコントロールの場所に追加したいと考えています。これを簡単に行うには、これらのクラスのインスタンスをControlsコレクションに追加して子コントロールにするだけです。内容は(

  • IE 6 select controls(Combo Box) over menu

  • を私がコントロールの内容をスクロールするように見える私のコントロールのスクロールバーを持っている:子コントロールは、例えば、いくつかの微妙な問題を引き起こす可能性があるとして、それらを追加する

    コントロール自体よりも大きい)。子コントロールが画面の端近くにある場合、その子を半分表示(つまりクリップする)したい(つまり、物理画面の端から半分の位置に配置する)ようにしたいが、本当の子コントロールはできないその親の境界の外側に位置する。

  • その他の問題がありますか?などのコンボボックスが含まれてい

私は(例えば)http://www.tizag.com/htmlT/htmlselect.phpを表示するためにIE7を使用して、と私はその後、私はそれをやっている時にIE7をスパイするためにスパイ++を使用して、私は単一のウィンドウを参照してください/コントロールインスタンス(クラス名が "Internet Explorer_Server"の子)はありません。

これは、IE7では、コンボボックスをレンダリングする機能がIE7コントロール自体に組み込まれており、IE7は子コントロールとして標準コントロールを使用しないことを意味しています。

質問:

  • それは、カスタムコントロールの子として標準コントロールを再利用する、または、カスタムコントロール自体の中に標準コントロールの機能を再実装する方が良いですか?
  • いずれのシナリオに関連する警告(警告)もありますか?
  • カスタムコントロール内の標準コントロールの機能を再実装したい場合は、再利用できる既存のコード(この機能を実装しているコード)を知っていますか?

このようなコードが既に存在する場合、私はそれを検索する方法がわかりません(私の検索では、コンボボックスを描画し、標準のコンボボックスに拡張します):おそらく、最初からコントロール?


編集

私は半関連する質問が見つかりました:はい、Internet Explorerは、WindowsのテーマAPIを使用してコントロールを描画しますHow to render a control to look like ComboBox with Visual Styles enabled?

答えて

2

を。 System.Windows.Forms.VisualStyles名前空間で定義された型を使用してこれを行うこともできます。

IEチームは、画面上に一度にウィンドウメッセージを受信するような非常に多くのコントロールを持つことによるパフォーマンス上の問題を避けるためにこれを行いました。たとえば、このStackOverflowを見てください。comページ、30-40のリンクラベルコントロール、10個のボタン、20個以上のラベルなどが表示されます。

.NET管理コードであるZuneソフトウェアもカスタムコントロールを使用します。いずれかのコントロールでSpy ++を使用しようとすると、実際のWin32コントロールではないことがわかります。 ReflectorをZuneソフトウェアで使用して、彼らが何をしているのかを正確に見ることができます。私が正しいことを思い出したら、彼らはZuneソフトウェアに含まれているカスタムマネージドUIフレームワークを使用しています。

これらのコントロールを最初から書き直している限り、やるべきことはたくさんあると思います。それは実際よりも簡単に聞こえます。

+0

ありがとうございました。 ControlPaintクラスとVisualStyleRendererクラスが存在することは知られておらず、カスタムコントロール内でコントロールの機能を再実装すると、詳細のペイントに役立つように見えます。 「これらのコントロールを最初から書き直すのは大変な作業です」と言っていますが、これらのコントロールを再実装するためにこれらのクラスは存在しません(これらのクラスを使用してこれらのコントロールを書き直すことは、やるべき事)? – ChrisW

+0

これらのクラスは、適切なテーマでこれらのコントロールを簡単にペイントするために存在します。実際にそれらの機能を実装することは、それらをペイントするだけではありません。確かに可能です(IE、Zuneなどがこれを行います)が、それは多くの作業です。 –

+0

もう一度ありがとうございます。私は多くの仕事の唯一のものが編集ボックスだと思う。ちなみに、VisualRenderはTextBoxRendererなどの他のクラスでラップされています。 – ChrisW

関連する問題