我需要在特定格式的消息框中打印一个字符串,我使用的代码类似于如下所示:

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 =详细信息。

不确定这是否是您的意思,但是使用 单身 字体喜欢”快递员新“。如果您已经做到了,那就很抱歉这个明显的答案。

没关系:标准消息框对此不可能 线. 。也许这样一个选项是创建自己的MessageBox类。

在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()方法显示它。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top