2009-07-13 24 views
1

ToolStripSplitButtonを把握しようとしています。目的は、ToolStripSplitButtonが押されたときにユーザーコントロールゲージを表示することです。ただし、どの設定を試しても、ボタンの下に灰色の線が表示されます。Winforms ToolStripSplitButtonは、その下に灰色の線で表示され、マウスがその上に移動したときにのみ表示されます。

ToolStrip自体がRenderMode.Systemに設定され、ドッキングされていないため、ToolStripSplitButtonがその中の唯一のコンポーネントです。

私はカスタムToolStripRendererクラスを導入することにより、行を削除することができますが、これは制御の下で、この単一の迷惑な濃い灰色の線を除去するため、総やり過ぎのように思えます。

私はこれらのコンポーネントのための設定を残念ながら提供していないので、暗闇の中でのトータルショットかもしれないことに気づいていますが、なぜこのコントロールが動作するのかについて誰かが洞察を与えることができたと思います。


私の2番目の質問は、ToolStripSplitButtonの動作に関するものです。マウスの上にマウスを置く前にコンポーネントが表示するフラットで境界線のない外観を避ける方法はありますか?パネルの残りのボタンと共に一様な外観にしようとしていますが、マウスカーソルがコンポーネントの上に置かれたときにのみToolStripSplitButtonが表示されます。すべてのヘルプは大幅にappreaciatedさ

ToolStripSplitButton flawed

はここにスクリーンショットです!

答えて

1

興味のある人は、結局、カスタムのToolStripRendererクラスを作成することになりました。ここでは、望みの結果を得るためにいくつかのメソッドをオーバーライドしなければならず、その結果はきれいになりました。ボタンのアウトラインを描画するには、単にControlPaintを使用し、タブダウンのようなドロップダウンの場合、ControlDarkDarkシステムカラーで線を描きました。細部にまでこだわっているわけではありませんが、すでにこれについて説明しているチュートリアルがいくつかあります。さて、ToolStripDropDownButtonからボタンのような振る舞いを得るためには、自分自身で描画を行う必要があるのですが、設定が別の場所と衝突している可能性があると判断していません。

興味があればコードを投稿できます。

2
/// <summary> 
/// This class provides custom rendering code for the ToolStrip and ToolStripDropDownButton because the standard windows 
/// rendering gave it a very flat look. 
/// </summary> 
public class CustomToolStripRenderer : ToolStripRenderer { 
    ToolStripDropDownButton toolStripDDButton; 

    public CustomToolStripRenderer(ToolStripDropDownButton toolStripDropDownButton) : base() { 
     toolStripDDButton = toolStripDropDownButton; 
    } 

    //protected override void OnRenderButtonBackground(ToolStripItemRenderEventArgs tsirea) { 
    // // Check if the item is selected or hovered over. 
    // if (tsirea.Item.Selected || tsirea.Item.Pressed) { 
    //  LinearGradientBrush brush = new LinearGradientBrush(tsirea.Item.Bounds, Color.DarkBlue, Color.DarkGreen, 90); 
    //  tsirea.Graphics.FillRectangle(brush, 0, 0, tsirea.Item.Width, tsirea.Item.Height); 
    // } 
    //} 

    protected override void OnRenderToolStripBackground(ToolStripRenderEventArgs tsrea) { 
     // This event occurs before the OnRenderDropDownButtonBackground event... 

     if (toolStripDDButton.Pressed) { 
      base.OnRenderToolStripBackground(tsrea); 
     } 
     else if (toolStripDDButton.Selected) { 
      ControlPaint.DrawButton(tsrea.Graphics, tsrea.AffectedBounds, ButtonState.Normal); 
     } 
     else { 
      ControlPaint.DrawButton(tsrea.Graphics, tsrea.AffectedBounds, ButtonState.Normal); 
     } 
    } 

    //protected override void OnRenderDropDownButtonBackground(ToolStripItemRenderEventArgs tsirea) { 
    // // Happens every time the button is hovered over as well, and upon mouseleave 

    // //ControlPaint.DrawButton(tsirea.Graphics, tsirea.Item.ContentRectangle, ButtonState.Normal); 
    // base.OnRenderDropDownButtonBackground(tsirea); 
    //} 

    protected override void OnRenderToolStripBorder(ToolStripRenderEventArgs tsrea) { 
     //This event occurs after the OnRenderDropDownButtonBackground event... 
     //Thus it will paint over whatever is already painted in the OnRenderDropDownButtonBackground event. 

     //Debug.Println("OnRenderToolStripBorder"); 
     if (toolStripDDButton.Pressed) { 
      // Draw the top and left borders of the component so that it looks like a tab page: 
      tsrea.Graphics.DrawLine(SystemPens.ControlDarkDark, tsrea.AffectedBounds.Left, tsrea.AffectedBounds.Top, tsrea.AffectedBounds.Left, tsrea.AffectedBounds.Bottom); 
      tsrea.Graphics.DrawLine(SystemPens.ControlDarkDark, tsrea.AffectedBounds.Left, tsrea.AffectedBounds.Top, tsrea.AffectedBounds.Right, tsrea.AffectedBounds.Top); 
     } 
     base.OnRenderToolStripBorder(tsrea); 
    } 

} 
関連する問題