カスタム コントロールがあります。これは、System.Windows.Forms.Control をサブクラス化するマネージ コードです。
このコントロールの場所に、編集ボックス、選択リスト、コンボ ボックス、ラジオ ボタンなどを追加したいと考えています。これを行う簡単な方法は、これらのクラスのインスタンスを Controls コレクションに追加して、それらが子コントロールになるようにすることです。
それらを子コントロールとして追加すると、次のような微妙な問題が発生する可能性があります。
コントロールのコンテンツをスクロールするように見えるコントロールにスクロールバーがあります(コンテンツはコントロール自体よりも大きいです)。子コントロールが画面の端に近い場合、その子を半分表示 (つまり、クリップ) したい (つまり、その半分を物理画面の端から離して配置する) ことができますが、真の子コントロールを表示することはできません。親の境界の外側にあります。
他に潜在的な問題はありますか?
IE7 を使用してコンボ ボックスなどを含むhttp://www.tizag.com/htmlT/htmlselect.php (たとえば) を表示し、Spy++ を使用して IE7 をスパイすると、子を持たない単一のウィンドウ/コントロール インスタンス (クラス名は "Internet Explorer_Server") しか表示されません。
これは、IE7 では、コンボ ボックスをレンダリングする機能が IE7 コントロール自体に組み込まれており、IE7 は標準コントロールを子コントロールとして使用しないことを意味していると思います。
質問:
- 標準コントロールをカスタム コントロールの子として再利用するのと、標準コントロールの機能をカスタム コントロール自体に再実装するのとのどちらがよいでしょうか?
- いずれかのシナリオに関連して、共有すべき警告 (警告) はありますか?
- カスタム コントロール内で標準コントロールの機能を再実装したい場合、再利用できる (この機能を実装する) 既存のコードを知っていますか?
そのようなコードが既に存在する場合、それを検索する方法がわかりません (私の検索では、たとえば、オーナー描画コンボ ボックスや標準コンボ ボックスの拡張機能が見つかります)。おそらく、標準コントロールをゼロから再実装する人はほとんどいないでしょうか?
編集
半関連の質問を見つけました: Visual Styles が有効になっている ComboBox のようにコントロールをレンダリングする方法は?