我正在使用String.Format()格式化一些文本信息,并且它与msdn中记录的“ Console.WriteLine()”完美配合.
我的代码是这样的:
StringBuilder strBuilder = new StringBuilder();
strBuilder.AppendLine("Summary Information:");
strBuilder.AppendFormat("{0,-10}{1,-8}{2,-10}{3,-30}{4,-7}\n", "Header1", "Header2", "Header3", "Header4", "Header5");
strBuilder.AppendFormat("{0,-10}{1,-8}{2,-10}{3,-30}{4,-7}\n\n", "A", "1", "Y", "Long Information", "13");
string result = strBuilder.ToString();
Console.WriteLine(result);
控制台结果如下所示.
但是,当我尝试在MessageBox上显示它时,列正在移动.不知何故,空间被吞没了.
MessageBox.Show(result, "MBox Test");
也可以,因为我不太喜欢.Net的“ MessageBox”类.它有很多限制.
因此,我决定实现一个自定义表单来显示此消息.我已经尝试过使用Label和RichTextBox.但不幸的是,结果与MessageBox完全相同.
我很困惑.为什么.Net自己的控件不能支持String.Format()的对齐方式.有什么办法可以应对这种情况?
解决方法:
String.Format(…)可以很好地工作,但是由于字体的原因,它不能与消息框中的表格对齐!
在您的控制台中,您使用固定宽度(等宽)字体,但是消息框使用一种具有动态宽度的字体.因此例如“ M”比“ i”或“”(空格)消耗更多的空间,这会使您的布局混乱.
从you can’t change the messagebox font开始,您必须使用支持自定义字体的任何类型的文本小部件来创建自己的框架,例如TextBox或仅是普通Label.