2009-03-17 24 views
4

TabControl内のTabPageにTrackBarコントロールがあります。 TrackBarの背景は、TabPageが白として描画されている間はグレーで描画されています。 TrackBarのBackColorプロパティを透明に設定する方法はなく、TrackBarのDrawModeプロパティがないため、図面をオーバーライドできません。 TrackBarをフィットさせるためにはどのようなオプションが必要ですか?なぜビジュアルスタイルをサポートしていないのですか?TabControl内のトラックバーの背景

答えて

1

CodePlexのTransparentTrackBarプロジェクトを参照してください。

+0

私は依存関係を抑えるために、組み込みのコントロールを使用することを期待していました。ビルトインコントロールがビジュアルスタイルをサポートしていない理由を理解できません。 –

2

シンプル

class MyTransparentTrackBar : TrackBar 
{ 
    protected override void OnCreateControl() 
    { 
     SetStyle(ControlStyles.SupportsTransparentBackColor, true); 
     if (Parent != null) 
      BackColor = Parent.BackColor; 

     base.OnCreateControl(); 
    } 
} 

私も(両方visualstyles有効と無効で動作するタブコントロールに透明な背景のトラックバーを、必要に応じて)これに直面しました。そして、これは私のために働いた。

+0

ビジュアルフォームエディタで、実行時にエラーが発生したColor.TransparentにBackColorを設定するコードを追加し始めました。 ;これを回避するために、私は次のよう '公共の新色BackColorプロパティ \t \t { \t \t \tは、get {base.BackColorを返すを追加しました(!値= Color.Transparent) \t \t \t \t { \t \t \t \t \t base.BackColor =値場合} \t \t \tは \t \t \t { \t \t \t \tを設定します。 \t \t \t \t} \t \t \t} \t \t} ' – Colin

2

ここでは干渉しませんが、上記の提案のどちらも私のために働いていません。

private const int WM_DWMCOMPOSITIONCHANGED = 0x031A; 
private const int WM_THEMECHANGED = 0x031E; 

protected override void OnVisibleChanged(EventArgs e) 
{ 
    Color color = this.BackColor; 
    trackBarQuality.BackColor = Color.FromArgb(color.R, color.G, color.B); 
} 

protected override void WndProc(ref Message m) 
{ 
    if (m.Msg == WM_DWMCOMPOSITIONCHANGED || m.Msg == WM_THEMECHANGED) 
     OnVisibleChanged(new EventArgs()); 

    base.WndProc(ref m); 
} 

だから私は基本的に背景色からアルファチャンネルを排除:トリックをやった は、次の行でした。しかし、まだVistaとWin 7でこれをテストしなければなりません。

-1

明白な解決策は、TrackBarのBackColorをSystem-ControlLightLightに設定することです。

(しかし、4歳の質問に対する明白な解決策の問題は、それはおそらく私が何かを誤解してきたことを意味していることである。)

関連する問題