私はカスタムコントロールを持っています:それはSystem.Windows.Forms.Controlをサブクラス化するマネージコードです。編集、コンボなどの標準コントロールを書き直しますか?
編集ボックス、選択リスト、コンボボックス、ラジオボタンなどをこのコントロールの場所に追加したいと考えています。これを簡単に行うには、これらのクラスのインスタンスをControlsコレクションに追加して子コントロールにするだけです。内容は(
を私がコントロールの内容をスクロールするように見える私のコントロールのスクロールバーを持っている:子コントロールは、例えば、いくつかの微妙な問題を引き起こす可能性があるとして、それらを追加する
コントロール自体よりも大きい)。子コントロールが画面の端近くにある場合、その子を半分表示(つまりクリップする)したい(つまり、物理画面の端から半分の位置に配置する)ようにしたいが、本当の子コントロールはできないその親の境界の外側に位置する。
その他の問題がありますか?などのコンボボックスが含まれてい
私は(例えば)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?
ありがとうございました。 ControlPaintクラスとVisualStyleRendererクラスが存在することは知られておらず、カスタムコントロール内でコントロールの機能を再実装すると、詳細のペイントに役立つように見えます。 「これらのコントロールを最初から書き直すのは大変な作業です」と言っていますが、これらのコントロールを再実装するためにこれらのクラスは存在しません(これらのクラスを使用してこれらのコントロールを書き直すことは、やるべき事)? – ChrisW
これらのクラスは、適切なテーマでこれらのコントロールを簡単にペイントするために存在します。実際にそれらの機能を実装することは、それらをペイントするだけではありません。確かに可能です(IE、Zuneなどがこれを行います)が、それは多くの作業です。 –
もう一度ありがとうございます。私は多くの仕事の唯一のものが編集ボックスだと思う。ちなみに、VisualRenderはTextBoxRendererなどの他のクラスでラップされています。 – ChrisW