标签是左侧和部分文本可能的部分文本吗?

时间:2017-06-13 10:23:27

标签: c# winforms label

标签是左侧和部分文本可能的部分文本吗?

        int x = 5;
        label1.Text = "MY TEXT FROM LEFT : " + x.ToString();

哪里,x从右边? 此Visual Studio 2013和Windows窗体应用程序

我的新想法:

 string length = "";

 for (int i = 0; i < 50; i++) 
   length += " ";

 label1.Text = "MY TEXT FROM LEFT : " + length +  x.ToString();

但是,窗口的长度 = ???

4 个答案:

答案 0 :(得分:1)

如果我理解正确,或许这样的事情就是你想要实现的目标?

var leftString = "Left string:";
var rightString = "Right string";

var graphics = textBox1.CreateGraphics();
var leftStringWidth = (int) graphics.MeasureString(leftString, textBox1.Font).Width;
var rightStringWidth = (int) graphics.MeasureString(rightString, textBox1.Font).Width;
var spaceWidth = (int) graphics.MeasureString(" ", textBox1.Font).Width;               
var padding = new string(' ', 
    (textBox1.Width - leftStringWidth - rightStringWidth) / spaceWidth);

textBox1.Text = leftString + padding + rightString;

<强>输出

enter image description here

答案 1 :(得分:1)

您可以订阅绘制事件以绘制下划线和第二个字符串:

["string 1",
"string 2",
"string 3",
].join('')

要使用窗口自动调整大小,您还需要将Anchor设置为Left,Right:

private void label1_Paint(object sender, PaintEventArgs e)
{
    var rightString = "Right string";

    var rightStringWidth = e.Graphics.MeasureString(rightString, label1.Font).Width;

    var rightStringXLocation = label1.Width - rightStringWidth;

    using (var brush = new SolidBrush(label1.ForeColor))
    {
        e.Graphics.DrawString(rightString, label1.Font, brush, new PointF(rightStringXLocation, 0));

        var lineHeight = label1.Height - 5;
        e.Graphics.DrawLine(new Pen(brush), e.Graphics.MeasureString(label1.Text, label1.Font).Width, lineHeight, rightStringXLocation, lineHeight);
    }
}

答案 2 :(得分:0)

按如下方式配置标签:

  • 主播:顶部,左侧,右侧
  • 自动调整大小:错误
  • TextAlign: TopRight

将标签加宽到窗口宽度。这样,文本将与表单右侧对齐。

enter image description here

<强>更新

尝试以下代码来测量宽度并设置适当的下划线数。请注意,我们测量1000个下划线以使其更精确。为示范傀儡添加了ButtonRandom。结果不是100%精确,但只需添加下划线字符就无法实现更多目标。

private Random _rnd = new Random(DateTime.Now.Millisecond);

private static float measureTextWidth(string text, Font font, Graphics g)
{
    SizeF size = g.MeasureString(text, font);
    return size.Width;
}

private void button1_Click(object sender, EventArgs e)
{
    using (Graphics g = label1.CreateGraphics())
    {
        string leftText = "Some caption";
        string rightText = new string('V', _rnd.Next(50));

        float leftWidth = measureTextWidth(leftText, label1.Font, g);
        float rightWidth = measureTextWidth(rightText, label1.Font, g);
        float underlineWidth = measureTextWidth(new string('_', 1000), label1.Font, g );
        underlineWidth = underlineWidth / 1000.0f;

        float allSpacesWidth = this.Width - leftWidth - rightWidth;
        int numberOfSpaces = (int)(allSpacesWidth / underlineWidth);

        label1.Text = leftText + new string('_', numberOfSpaces) + rightText;
    }

如果Graphics.MeasureString不够精确,有一种先进的方法来测量字符串大小: https://www.codeproject.com/Articles/2118/Bypass-Graphics-MeasureString-limitations

答案 3 :(得分:0)

如果您可以使用2个标签而不是1个:
在表单上放置TableLayoutPanel(根据需要使用对接或锚点)。
面板应有1行2列(AutoSize)
向面板添加2个标签(一个带锚,左边第二个带锚右) 将“左侧文本”设置为第一个标签,将“右侧文本”设置为第二个标签。