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对齐:右上角
随机
,用于演示。结果并非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;