ビジュアル スタイルを有効にした ComboBox のようにコントロールをレンダリングするにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/2874

  •  08-06-2019
  •  | 
  •  

質問

をモデルとしたコントロールがあります。 コンボボックス. 。コントロールをレンダリングして、コントロールが 国境 標準のもののように見えます Windows コンボボックス. 。具体的には、MSDN ドキュメントに従っており、コントロールが無効になっている場合のレンダリングを除いて、コントロールのレンダリングはすべて正しく行われています。

明確にしておきますが、これは次のシステムを対象としています。 ビジュアルスタイル 有効になりました。また、無効なコントロールの周囲の境界線を除き、コントロールのすべての部分が適切にレンダリングされます。この境界線は無効なコントロールと一致しません。 コンボボックスの境界線 色。

私が使用しているのは、 VisualStyleRenderer クラス。MSDN では、 VisualStyleElement.TextBox の要素 テキストボックス の一部 コンボボックス コントロールだが標準は無効になっている テキストボックス そして標準は無効になっています コンボボックス 描画方法が少し異なります (1 つは明るい灰色の境界線、もう 1 つは明るい青色の境界線です)。

無効な状態でコントロールを正しくレンダリングするにはどうすればよいですか?

正しい解決策はありません

他のヒント

これがあなたが探しているものであるかどうかは 100% わかりませんが、以下をチェックしてください。 VisualStyleRenderer System.Windows.Forms.VisualStyles 名前空間内。

  1. VisualStyleRenderer クラス (MSDN)
  2. 方法:ビジュアルスタイル要素をレンダリングする (MSDN)
  3. 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.
}

それが役に立てば幸い!

のいずれかですか コントロールペイント これに役立つ方法はありますか?これは私が通常、カスタムレンダリングされたコントロールに使用するものです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top