2010-12-20 7 views
3

BackColorSystemColors.Control以外の親コントロールを持っていても、その親コン​​トロールのボタンがシステムに描画されるようにしたい。ただし、ボタンのBackColorを変更しないと、親の色で描画されます。ボタンのBackColorSystemColors.Controlに変更すると、Windowsテーマではそれ以上描画されません。ボタンが親のBackColorを継承しないようにする

alt text
左バージョンがSystemColors.Controlであり、右はBackColorを変更せずにあります。爆破

alt text
、それはこのようになります。ここでは、ボタンが堅実な背景を持つことがわかります。

私はこれをどのように修正することができますか?

画像における効果は、新しい.NET 2.0のWinFormsプロジェクトを作成し、次へForm1のコンストラクタを変更することによって達成することができます。

public Form1() 
{ 
    InitializeComponent(); 

    var textBox = new TextBox(); 
    Controls.Add(textBox); 

    var button = new Button { Text = "L", Width = 23, Height = 18, Left = -1, Top = -1 }; 
    textBox.Controls.Add(button); 

    // Disable the line below to get the default behavior 
    button.BackColor = SystemColors.Control; 
} 
+0

私は見ることができません、ボタンの表面のコントロールの色で通常の勾配に似ています。それを大きくする。 –

+0

@ハンス・パッセンジャー - そこに行きます。 –

答えて

3

私はunforuantelyだけなので、現時点でのWindows 7へのアクセス権を持っています私はXPなどでテストすることはできませんが、Application.EnableVisualStylesをWinFormsアプリケーションのMainエントリポイントで呼び出していますか?

Aeroを有効にしたWindows 7では、Application.EnableVisualStylesが呼び出された場合、ボタンは親の色を引き継ぎません。

NB:button.UseVisualStyleBackColor = true;を設定し、ボタンのBackColorプロパティを明示的に設定しないでください。

+0

はい。スクリーンショットは、基本テーマ(つまりAeroなし)のWindows 7からのものです。新しいクリーンなWinFormsプロジェクトでエフェクトを再現するコードサンプルを追加しました。 –

+0

あなたの編集後に私の答えを更新しました。 –

+0

私のヒーロー。ありがとう。 –

関連する問題