gpt4 book ai didi

C# 在查询 MeasureString 时标签是否忽略空格?

转载 作者:太空宇宙 更新时间:2023-11-03 15:34:56 25 4
gpt4 key购买 nike

<分区>

我一直在尝试查找自动收报机磁带类型应用程序中的错误。希望这个背景不会太长。

背景:自动收报机磁带需要从右边开始显示字符,然后滚动到左边。由于应用程序是 Windows 窗体并且需要背景颜色透明,所以我需要使用标签(或者我需要使用标签吗?)。使用不同的控件时遇到问题。控件大小和字体未知,必须在运行时计算。

自动收报机磁带有主要场景,首先是我们需要在显示字符串左侧填充的开始。

我们去除前面字符和添加字符的中间仍然需要显示。

应该向右 PAD 的结尾将最后一个字符移动很长时间,直到最后一个字符全部向左移动。然后消息就完成了。

我有 2 个函数与这个问题有关:

1) 使用控件和字体计算显示文本的大小。

2) 应用程序的核心是返回显示文本的函数。

问题:

开头和中间场景完美运行,如果我用空格填充结尾则不起作用,但如果我使用任何其他可见字符(如“.”)则可以。它有效。

大小函数:

 Label tstLabel = new Label();
tstLabel.Size = DisplaySize;
tstLabel.Font = new Font(currentMessage.Font, currentMessage.Fonsize);
var g = Graphics.FromHwnd(tstLabel.Handle);
SizeF size = g.MeasureString(text, tstLabel.Font);
return size;

显示文字功能:

SizeF spaceSize = getSize(" ");
string text = "";
if(currentCharacter < currentMessage.MessageText.Length )
{
text = currentMessage.MessageText.Substring(0, currentCharacter + 1);
SizeF displayTextSize = getSize(text);
if (displayTextSize.Width <= DisplaySize.Width)
{
int numSpaces = Convert.ToInt32((DisplaySize.Width - displayTextSize.Width) / spaceSize.Width);
text = text.PadLeft(numSpaces + text.Length, ' ');
currentCharacter++;
#endregion
}
else
{
#region Pop char off front
bool keepPadding = true;
do
{
text = text.Substring(1, text.Length - 1);
displayTextSize = getSize(text);
if (displayTextSize.Width <= DisplaySize.Width)
{
keepPadding = false;
}
} while (keepPadding);
currentCharacter++;
#endregion
}
}
else
{
#region Pop char off front and Pad to right
text = currentMessage.MessageText.PadRight(currentCharacter+1,'.');
bool keepPadding = true;
do
{
text = text.Substring(1, text.Length - 1);
SizeF endTextSize = getSize(text);
if (endTextSize.Width <= DisplaySize.Width)
{
if ((DisplaySize.Width - endTextSize.Width) > spaceSize.Width)
{
do
{
text += ".";
endTextSize = getSize(text);
currentCharacter++;
} while ((DisplaySize.Width - endTextSize.Width) > spaceSize.Width);
}
keepPadding = false;
}
} while (keepPadding);
currentCharacter++;
if (checkMessage(text))
nextMessage = true;
}
return text;

问题:

当在标签上执行下面的功能时,文本后面有空格,为什么它返回相同的大小?

SizeF size = g.MeasureString(text, tstLabel.Font);

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com