16


3

「グリップ」からスペースを取り戻す方法

単一のToolStripStatusLabel、Spring = true、および通知の背景色を持つStatusStripがあります。

問題は、ステータスストリップの右側にい灰色の正方形があることです。 しばらくいじった後、これがサイジンググリップであることに気付きました(SizingGrip = false、GripStyle = Hiddenに設定されていました)。 しかし、それが隠されていても、スペースを占有します。 ステータスストリップのコンテンツを取得して、右端まで拡張することはできません。

これをどのように回避しますか? 注:ステータスラベルの色が変わり、いくつかのフェード効果があるため、StatusStripの背景色を設定することはできません。

4 Answer


26


StatusStrip.Paddingプロパティは中断され、サイジンググリップが無効になっている場合、Padding.Rightに対して誤った値を返します。 次のように、フォームコンストラクターで修正できます。

public Form1() {
  InitializeComponent();
  statusStrip1.Padding = new Padding(statusStrip1.Padding.Left,
    statusStrip1.Padding.Top, statusStrip1.Padding.Left, statusStrip1.Padding.Bottom);
}

Leftプロパティを使用してRightを指定することが解決策です。 このバグをConnectに送信しないでください。彼らは修正しません。


1


MSDNのこのブログエントリをご覧ください。 問題は、サイジンググリップのサイズを手動で変更することでした。ToolStripRendererを提案どおりに使用することで、うまくいくと思います。

私がこれまで抱えている問題は、StatusStripのステータスラベルの背景色を削除することです。したがって、まだ解決策ではありませんが、開始点です。

    public MyForm()
    {
        InitializeComponent();
        statusStrip1.Renderer = new MyRenderer();
    }

    private class MyRenderer : ToolStripProfessionalRenderer
    {
        protected override void OnRenderStatusStripSizingGrip(ToolStripRenderEventArgs e)
        {
            // don't draw at all
        }
    }


0


次の問題がありました:「tsslSeparator.Spring = true」を設定すると、tsslSeparatorがフォーカスを失った直後に私の右ラベルが消えました。 この問題は、サイズ変更グリップを有効にしたときに発生しました。 無効にしたとき、すべてがうまく機能しました。 解決策は、右ラベルの右マージンを0以外の値に設定することでした。

tsslLogging.Margin = new Padding(0, 3, 2, 2); // this is necessary for right alignment of status bar label

これが誰かに役立つことを願っています。


0


マイクロソフトが修正に興味がない場合、適切な修正がすべての方向を処理し、理想的にはすべてのステータスストリップを修正する必要があるようです(https://stackoverflow.com/a/41194283/2557128[Get All Children]への私の答えを参照してください) GetAllChildrenの定義用)

    public static StatusStrip FixPadding(this StatusStrip ss) {
        if (!ss.SizingGrip) {
            var fixpad = ss.Padding;

            if (ss.Orientation == Orientation.Horizontal) {
                if (ss.RightToLeft == RightToLeft.No)
                    fixpad.Right = fixpad.Left;
                else
                    fixpad.Left = fixpad.Right;
            }
            else
                fixpad.Bottom = fixpad.Top;

            ss.Padding = fixpad;
        }

        return ss;
    }

    public static void FixStatusStripPadding(this Form f) {
        foreach (var ss in f.GetAllChildren().OfType())
            ss.FixPadding();
    }