ビジュアル スタイルを有効にした ComboBox のようにコントロールをレンダリングするにはどうすればよいですか?
質問
をモデルとしたコントロールがあります。 コンボボックス. 。コントロールをレンダリングして、コントロールが 国境 標準のもののように見えます Windows コンボボックス. 。具体的には、MSDN ドキュメントに従っており、コントロールが無効になっている場合のレンダリングを除いて、コントロールのレンダリングはすべて正しく行われています。
明確にしておきますが、これは次のシステムを対象としています。 ビジュアルスタイル 有効になりました。また、無効なコントロールの周囲の境界線を除き、コントロールのすべての部分が適切にレンダリングされます。この境界線は無効なコントロールと一致しません。 コンボボックスの境界線 色。
私が使用しているのは、 VisualStyleRenderer クラス。MSDN では、 VisualStyleElement.TextBox
の要素 テキストボックス の一部 コンボボックス コントロールだが標準は無効になっている テキストボックス そして標準は無効になっています コンボボックス 描画方法が少し異なります (1 つは明るい灰色の境界線、もう 1 つは明るい青色の境界線です)。
無効な状態でコントロールを正しくレンダリングするにはどうすればよいですか?
正しい解決策はありません
他のヒント
これがあなたが探しているものであるかどうかは 100% わかりませんが、以下をチェックしてください。 VisualStyleRenderer System.Windows.Forms.VisualStyles 名前空間内。
- VisualStyleRenderer クラス (MSDN)
- 方法:ビジュアルスタイル要素をレンダリングする (MSDN)
- VisualStyleElement.ComboBox.DropDownButton.Disabled (MSDN)
ユーザーがビジュアル スタイルを有効にしていない場合 (ユーザーが「クラシック モード」または Windows XP 以前のオペレーティング システムを実行している可能性があります)、VisualStyleRenderer は機能しないため、常に ControlPaint クラスへのフォールバックを用意する必要があります。
// Create the renderer.
if (VisualStyleInformation.IsSupportedByOS
&& VisualStyleInformation.IsEnabledByUser)
{
renderer = new VisualStyleRenderer(
VisualStyleElement.ComboBox.DropDownButton.Disabled);
}
そして、描画するときに次のようにします。
if(renderer != null)
{
// Use visual style renderer.
}
else
{
// Use ControlPaint renderer.
}
それが役に立てば幸い!
のいずれかですか コントロールペイント これに役立つ方法はありますか?これは私が通常、カスタムレンダリングされたコントロールに使用するものです。