4

多数のアイテムを含むステータス ストリップがあります。それらの 1 つはToolStripStatusLabelwithSpring = Trueです。ラベルのテキストが長すぎると、ラベルが見えなくなります。

ステータスストリップを高くして、テキスト全体を複数行で表示することはできますか?

4

1 に答える 1

4

これは興味深い問題です....いくつかのことを試しましたが、成功しませんでした...基本的に、ToolStripStatusLabel の機能は非常に限られています。

私はあなたが望む結果をもたらすハックを試みましたが、もちろんこれが絶対に必要でない限り、これをお勧めするかどうかさえわかりません...

これが私が持っているものです...

StatusStrip のプロパティで AutoSize = false を設定します。これにより、複数の行に対応するように StatusStrip のサイズを変更できます。toolStripStatusLabel1 というラベルを含む ststusStrip1 という statusStrip を想定しています。

フォーム レベルで、TextBox 型の変数を宣言します。

  TextBox txtDummy = new TextBox();

Form Load で、いくつかのプロパティを設定します。

  txtDummy.Multiline = true;
  txtDummy.WordWrap = true;
  txtDummy.Font = toolStripStatusLabel1.Font;//Same font as Label

toolStripStatusLabel1 のペイント イベントを処理します。

 private void toolStripStatusLabel1_Paint(object sender, PaintEventArgs e)
 {        

    String textToPaint = toolStripStatusLabel1.Tag.ToString(); //We take the string to print from Tag
    SizeF stringSize = e.Graphics.MeasureString(textToPaint, toolStripStatusLabel1.Font);
    if (stringSize.Width > toolStripStatusLabel1.Width)//If the size is large we need to find out how many lines it will take
    {
        //We use a textBox to find out the number of lines this text should be broken into
        txtDummy.Width = toolStripStatusLabel1.Width - 10;
        txtDummy.Text = textToPaint;
        int linesRequired = txtDummy.GetLineFromCharIndex(textToPaint.Length - 1) + 1;
        statusStrip1.Height =((int)stringSize.Height * linesRequired) + 5;
        toolStripStatusLabel1.Text = "";
        e.Graphics.DrawString(textToPaint, toolStripStatusLabel1.Font, new SolidBrush( toolStripStatusLabel1.ForeColor), new RectangleF( new PointF(0, 0), new SizeF(toolStripStatusLabel1.Width, toolStripStatusLabel1.Height)));
    }
    else
    {
        toolStripStatusLabel1.Text = textToPaint;
    }
} 

IMP: ラベルのテキスト プロパティを割り当てないでください。代わりに、タグから使用するタグに入れます。

 toolStripStatusLabel1.Tag = "My very long String";

スクリーンショット

于 2012-07-19T12:10:40.410 に答える