2012-11-16 5 views
6

私はToolStrip(GripStyle:Hidden、Dock:Top、RenderMode:ManagerRenderMode)でかなり標準のMainFormを持っているWindows Formアプリケーション(C#、.NET 4.0、VS 2010)を使っています。ツールストリップには、基本的な項目がいくつか含まれています(ToolStripLabel、ToolStripSeparator、ToolStripSplitButton)。ToolStrip Rounded Corners

次のようにこれがレンダリングされます。まず

ToolStrip rendered by default ManagerRenderMode

私は単にのToolStrip以下「ボトム」の境界線を追加したいが、私はまた、(これのToolStripが「角丸」でレンダリングされていることに気づきました画像の右上と下のものを見ることができます)、および垂直グラデーションライン。

これらのコーナーを丸めないにはどうすればよいですか?

私が試した:

public class MainFormToolStripRenderer : ToolStripProfessionalRenderer 
{ 
    protected override void OnRenderToolStripBorder(ToolStripRenderEventArgs e) 
    { 
     base.OnRenderToolStripBorder(e); 

     var y = e.ToolStrip.Height-1; 
     e.Graphics.DrawLine(new Pen(SystemColors.ControlDark, 1), new Point(0, y), new Point(e.ToolStrip.Width, y)); 
    } 

をそして、私のフォームの初期化でthis.toolStrip_Actions.Renderer=new MainFormToolStripRenderer();を経由してそれを有線。

これは私に下の境界線を与えましたが、丸い角のために何もしませんでした。また、添加下罫線と、丸い角は、より顕著である。

ToolStrip rendered by custom ToolStripProfessionalRenderer

次に、私は(少なくとも)丸い角と垂直を隠そうとする、上記と同じイベントハンドラの間に四角形を描画しようとしました実線の四角い枠の後ろのグラデーション。使用可能な描画領域(e.AffectedBounds)が丸められた境界内にあるため、これは機能しませんでした。

また、ToolStripのRenderModeをSystemに設定しようとしましたが、私のレンダラーは使用しませんでした。この場合、ツールストリップの角はぴったり合っているように見えますが(長方形)、ツールバー内の分割ボタンが破損しているように見えます(下矢印をクリックしてもドロップダウンは表示されません)。あなたがツールストリップのいくつかのボタンにカーソルを置くまでは、かなり不安です。

私は最後に、ManageeRenderedMode、またはプロフェッショナルなものを継承したカスタムレンダラーを使用したいと思いますが、丸みを帯びたコーナーを取り除く必要があります。 とりわけ、私はthis SO Qが私が見ているものに近いと思われるが、私の場合は答えを与えていないことが分かった。事前に

おかげ

+1

Winformsは、独自のコントロールを完全に作成することなく、何かをレンダリングする際の痛みです。今は遅すぎるかもしれませんが、WPF/XAMLを使いこなしましたか? – iMortalitySX

+0

ありがとうございましたが、以前はWPFを見ていましたが、今は "基本的な" winformsに固執しようとしています。私は特定の詳細をオーバーライドする必要がある場合、標準のToolstripを継承しても構いませんが、ええ、私たち自身ですべてをレンダリングする必要はありません。 ) – FOR

答えて

9

は、あなたのレンダラークラスでこれを試してみてください:言及am05mhzとして

public class MainFormToolStripRenderer : ToolStripProfessionalRenderer { 

    public MainFormToolStripRenderer() { 
    this.RoundedEdges = false; 
    } 
} 
+0

すごい!ありがとうございました(実際にカスタムレンダラーで.RoundedEdgesプロパティをfalseに設定しましたが、それはトリックでした)!コーナーが丸みを帯びていないので、スプリットボタンが機能しなくなったためにまだ少し問題がありますが、それは主要な問題を解決して正しいパスに入れてくれたので、私はあなたの答えを受け入れます。 – FOR

+2

実際には、System、Professional、およびManagerRenderModeの3つのオプションを持つToolStripプロパティにRenderModeオプションがあります。最初のオプションは、OSが丸められていないToolStripをレンダリングさせ、最後の2つは丸められます – am05mhz

2

、ちょうどRenderMode>システムと丸みを帯びた角が消え選択:

0

accepted answerで構築すると図10に示すように、新しいRendererクラスを実装する必要は必ずしもありません。

次のように、1つのライナーとしてこれを行うことができます。

toolStrip_Actions.Renderer = new ToolStripProfessionalRenderer() { RoundedEdges = false }; 

またはManagerRenderModeに設定RenderModeとのToolStripのデフォルトのレンダラが既にToolStripProfessionalRendererているので、あなたがそのようにキャストし、RoundedEdgesにアクセスすることをプロパティは次のように直接入力します。

((ToolStripProfessionalRenderer)toolStrip_Actions.Renderer).RoundedEdges = false; 
関連する問題