C# 标签是否可能是左侧的零件文本和右侧的零件文本?

C# 标签是否可能是左侧的零件文本和右侧的零件文本?,c#,winforms,label,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 T

标签是否可能是左侧的零件文本和右侧的零件文本

        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();
字符串长度=”;
对于(int i=0;i<50;i++)
长度+=“”;
label1.Text=“我左边的文字:”+length+x.ToString();

但是,我的窗口长度=

按如下方式配置标签:

  • 锚定:顶部、左侧、右侧
  • 自动调整大小:False
  • text对齐:右上角
并将标签加宽到窗口宽度。这样,文本将与表单右侧对齐

更新:

请尝试使用以下代码测量宽度并设置适当的下划线数。请注意,我们测量了1000个下划线以使其更精确<添加代码>按钮和
随机
,用于演示。结果并非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;
    }
如果
图形,有一种先进的方法来测量字符串大小。测量
将不够精确:

如果我理解正确,也许这就是你想要实现的目标

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;
输出


如果您可以使用两个标签而不是一个:
将TableLayoutPanel(根据需要使用停靠或锚定)放置在表单上。
面板应具有1行和2列(自动调整大小)
在面板上添加2个标签(一个带左锚,另一个带右锚)
将“左文本”设置为第一个标签,“右文本”设置为第二个标签。

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

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);
    }
}
要使用窗口自动调整大小,还需要将“定位点”设置为左、右:

this.label1.Anchor = (AnchorStyles)(AnchorStyles.Left | AnchorStyles.Right);

请问问题是什么?不,您不能在一个标签中格式化具有不同对齐方式的文本。您需要两个单独的标签和一个包含元素。如何使部分文本向左和向右成为文本的一部分(窗口长度)u使用的是xaml表单还是winform?请查看编辑问题。如何计算我的窗口长度?我想同时计算文本和左右。我已经找到了这样做的方法。但我知道的不多,我不知道如何计算程序窗口左边缘和右边缘之间的长度。这可能是如何将PX转换为int lenght=.的数值的问题。。。因此,我可以将其插入(…)并在.@J.Doe之间生成空格。您可以轻松地同时使用两个标签模拟相同的结果。标签之间应加下划线。我不知道怎么做-两个标签。@J.Doe请检查更新的答案。它应该适用于所有窗口宽度和任何测试。但请确保窗口有足够的空间容纳文本的左右部分,否则可能会出现错误。@J.Doe是否确定在调整表单大小后调用标签更新逻辑?是,效果正常。但不能在windows上工作。。或不同的媒体屏幕大小Form1.Designer.csError 1当前上下文中不存在名称“AnchorStyles”。this.label1.Anchor=AnchorStyles.Left | AnchorStyles.Right;