35

ComboBoxをモデルにしたコントロールがあります。コントロールの境界線が標準のWindowsComboBoxの境界線のようになるようにコントロールをレンダリングしたいと思います。具体的には、MSDNのドキュメントに従っており、コントロールが無効になっている場合のレンダリングを除いて、コントロールのすべてのレンダリングは正しいです。

明確にするために、これはビジュアルスタイルが有効になっているシステム用です。また、無効になっているコントロールの周囲の境界線を除いて、コントロールのすべての部分が適切にレンダリングされます。これは、無効になっているComboBoxの境界線の色と一致しません。

VisualStyleRendererクラスを使用しています。MSDNは、 ComboBoxコントロールのTextBox部分にVisualStyleElement.TextBox要素を使用することを提案していますが、標準の無効なTextBoxと標準の無効なComboBoxの描画は少し異なります(一方には薄い灰色の境界線があり、もう一方には水色の境界線があります)。

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

4

2 に答える 2

11

これがあなたが探しているものであるかどうかは100%わかりませんが、System.Windows.Forms.VisualStyles-namespaceのVisualStyleRendererをチェックする必要があります。

  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.
}

それが役に立てば幸い!

于 2008-08-16T21:28:33.287 に答える
1

Are any of the ControlPaint methods useful for this? That's what I usually use for custom-rendered controls.

于 2008-08-16T19:58:44.013 に答える