18

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

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

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

4

4 に答える 4

29

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に送信しないでください。修正されません。

于 2010-04-15T17:16:23.470 に答える
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
        }
    }
于 2010-04-15T15:38:41.740 に答える
0

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

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

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

于 2014-07-02T16:34:35.347 に答える
0

Microsoftがそれを修正することに興味がない場合は、適切な修正ですべての方向を処理し、理想的にはすべてのステータスストリップを修正する必要があるようです(GetAllChildrenの定義についてはGet All Childrenへの私の回答を参照してください)

    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<StatusStrip>())
            ss.FixPadding();
    }
于 2016-12-17T00:44:56.743 に答える