与c#中的字符串格式化的格式化的问题
-
02-10-2019 - |
题
我需要在特定格式的消息框中打印一个字符串,我使用的代码类似于如下所示:
string text="";
for (int i=0; i<n; i++)
{
a=..
b=..
c=..
text += String.Format("{0, -8} {1,-4} {2,8}", a, b, c);
}
MessageBox.Show(text);
因此,用于以下值集:
XYZ,ABC,100
X,ABC,100
我得到以下输出:
XYZ ABC 100
X ABC 100
因此,您可以看到第二行的格式不佳。这可能是因为我在Message Box中打印了此功能。角色和“空间”所占的空间不同。有什么解决方案吗?
解决方案
尝试使用一个 \t
在值之间插入选项卡。
其他提示
这是不起作用的,因为MessageBox使用了比例间隔字体,该字母M比字母L宽得多。就像您现在正在阅读的消息中一样。您只能期望像这样的对齐方式使用固定式字体,可以正常工作。更改消息框字体不合适,它是系统设置。
您可以使用标签可以更好地获得它:
text += String.Format("{0}\t{1}\t{2}", a, b, c);
但是,如果场地尺寸接近标签大小,则不会笨拙。使用listView With View =详细信息。
在Windows应用程序中创建的一个具有以下代码的测试:
public void Test1()
{
List<List<String>> list = new List<List<string>>() {
new List<String>() { "XYZ", "ABC","100" },
new List<String>() { "X", "ABC", "100"},
};
string text = "", a = "", b = "", c = "";
for (int i = 0; i < list.Count; i++)
{
a = list[i][0];
b = list[i][1];
c = list[i][2];
text += String.Format("{0, -8} {1,-4} {2,8}{3}", a, b, c, Environment.NewLine);
}
MessageBox.Show(text);
}
执行您的意思,但是使用以下代码对游戏机应用程序进行了检查之后:
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Test1();
Console.ReadKey();
}
public static void Test1()
{
List<List<String>> list = new List<List<string>>() {
new List<String>() { "XYZ", "ABC","100" },
new List<String>() { "X", "ABC", "100"},
};
string text = "", a = "", b = "", c = "";
for (int i = 0; i < list.Count; i++)
{
a = list[i][0];
b = list[i][1];
c = list[i][2];
text += String.Format("{0, -8} {1,-4} {2,8}{3}", a, b, c, Environment.NewLine);
}
Console.WriteLine(text);
}
}
}
它可以做到您期望的。
因此,测试的建议是,是否正在做应该做的事情,但是由于缺乏相同的宽度字体 MessageBox
, ,它不能正确排列。但是,另一方面,使用相同宽度字体的控制台应用程序,它确实会完全排列。
MessageBox类,无论是从表单还是WPF,都是Win32消息框的包装器,因此程序员无法(轻松)执行诸如将字体更改为固定式字体之类的事情,因此所有字符都与字符串格式。
但是,您可以使用表单和标签(以及所需的任何按钮)制作自己的MessageBox的克隆,然后使用Showdialog()方法显示它。
不隶属于 StackOverflow