标签是左侧和部分文本可能的部分文本吗?
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();
但是,窗口的长度 = ???
答案 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;
<强>输出强>
答案 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)
按如下方式配置标签:
将标签加宽到窗口宽度。这样,文本将与表单右侧对齐。
<强>更新强>
尝试以下代码来测量宽度并设置适当的下划线数。请注意,我们测量1000个下划线以使其更精确。为示范傀儡添加了Button
和Random
。结果不是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个标签(一个带锚,左边第二个带锚右)
将“左侧文本”设置为第一个标签,将“右侧文本”设置为第二个标签。