2

I'm using Windows 7 and Winforms/C#.

When I add a toolstrip to a toolstrip container, I get 3 pixels of space to the left of the toolstrip. Even if I set the location to 0,0, it resets it back to 3,0. Here is a picture to demonstrate this:

enter image description here

How can I avoid this? I've set the padding and the margin of the ToolStripContainer to 0, and experimented with different RenderModes, but nothing seems to help. Any ideas?

4

1 に答える 1

5
public Form1()
{
    InitializeComponent();
    this.toolStripContainer1.TopToolStripPanel.RowMargin = new Padding(0);
}

RowMargin内の ToolStripPanelsのプロパティを設定するだけToolStripContainerです。デザイナーでは使用できないため、上記のようにコードで設定する必要があります。どうやらデフォルトでは、そのLeftプロパティはRowMargin3 に設定されています。これが、0 に設定しても場所が変わらなかった理由です。

結果:

RowMargin が 0 の ToolStripContainer

編集: 自分の好奇心を刺激したようです。現在、下部の 2 ピクセルのギャップを取り除くことができるかどうかを確認しようとしています。これまでのところ、追跡するのははるかに難しいようです。

編集2:わかりました。ToolStripそれはの Rendererによって行われていました。この例では、 として使用Systemしていたので、メソッドを継承してオーバーライドRenderModeする新しいクラスをプロジェクトに追加し、ベース メソッドへの呼び出しをコメント アウトしました。ToolStripSystemRendererOnRenderToolStripBorder

using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public class MyToolStripSystemRenderer : ToolStripSystemRenderer
    {
        protected override void  OnRenderToolStripBorder(ToolStripRenderEventArgs e)
        {
            //base.OnRenderToolStripBorder(e);
        }
    }
}


次に、フォームのコンストラクターに別の行を追加して、カスタム レンダラーを割り当てました。

public Form1()
{
    InitializeComponent();
    this.toolStrip1.Renderer = new MyToolStripSystemRenderer();
    this.toolStripContainer1.TopToolStripPanel.RowMargin = new Padding(0);
}


結果:
RowMargin が 0 で 2 ピクセルの境界線がない ToolStrip パネル

編集 3: 今日、これが既知のバグであることがわかりましたToolStripSystemRenderer。最初は何か関係があると思っていたので見つからなかったと思いますToolStripContainer。とにかく、助けてくれる人のために、ツールストリップの「境界」に関するSOの質問があります。https://stackoverflow.com/a/2060360/2056131

于 2013-02-23T02:48:08.287 に答える