Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 如何在VB中格式化打印报告的结构数组?_Vb.net - Fatal编程技术网

Vb.net 如何在VB中格式化打印报告的结构数组?

Vb.net 如何在VB中格式化打印报告的结构数组?,vb.net,Vb.net,我正在开发一个程序,该程序接受来自文本框的输入,并将该输入放入一个结构数组中。这些结构包括一个名称字符串变量、一个5个双精度数组,最后是一个保存前一个数组中值平均值的双精度数组。我试图将整个结构数组发送到一个可打印的报告中,但在为打印机格式化如此大量的数据时遇到了很大的困难。为了更好地解释我的困难,以下是我迄今为止所写的内容: 'Print the report header e.Graphics.DrawString("Class Report",

我正在开发一个程序,该程序接受来自文本框的输入,并将该输入放入一个结构数组中。这些结构包括一个名称字符串变量、一个5个双精度数组,最后是一个保存前一个数组中值平均值的双精度数组。我试图将整个结构数组发送到一个可打印的报告中,但在为打印机格式化如此大量的数据时遇到了很大的困难。为了更好地解释我的困难,以下是我迄今为止所写的内容:

'Print the report header
e.Graphics.DrawString("Class Report",
                      New Font("Courier New", 12, FontStyle.Bold),
                      Brushes.Black,
                      150,
                      10)

e.Graphics.DrawString("Date and Time: " & Now.ToString(),
                      New Font("Courier New", 12, FontStyle.Bold),
                      Brushes.Black,
                      10,
                      38)

'Prints the column headers
e.Graphics.DrawString(String.Format("{0, 20} {1, 20} {2, 20}",
                                    "Name",
                                    "Test Scores",
                                    "Average"),
                      New Font("Courier New", 12, FontStyle.Bold),
                      Brushes.Black,
                      10,
                      66)

'prints the data
For intCount = 0 To 5
    e.Graphics.DrawString(String.Format("{0, 20} {1, 5} {2, 5} {3, 5} {4, 5} {5, 5} {6, 5} {7, 20}",
                                        ClassScores(intCount).strName,
                                        ClassScores(intCount).dblTestScores(0),
                                        ClassScores(intCount).dblTestScores(1),
                                        ClassScores(intCount).dblTestScores(2),
                                        ClassScores(intCount).dblTestScores(3),
                                        ClassScores(intCount).dblTestScores(4),
                                        ClassScores(intCount).dblTestAvg),
                          New Font("Courier New", 12, FontStyle.Regular),
                          Brushes.Black,
                          150,
                          165)
Next
现在,这段代码抛出system.format异常。这让我难以置信地困惑,因为之前我相当确定我在尝试对打印的内容进行一些更改(即将结构转换为并行字符串数组)之前就已经有了这段代码,但是我放弃了这一尝试,尝试返回到代码的前一版本,显然没有成功

也就是说,当我实际使用代码时,打印的文档有很多问题。例如,标题行没有居中,而是挂在文档的右上角。第二,当打印实际数据时,所有数据都打印在一行上,一列中的名称和另一列中的所有数字都打印在彼此的顶部。具体列举我寻求帮助的内容:

  • 如何使用此代码清除system.format异常

  • 当循环循环时,如何确保新数据适合打印文档中的新行

  • 我需要一些帮助来理解格式字符串编号,特别是关于标题以及如何确定列的宽度


  • 非常感谢。这个程序有很多可移动的部分,因此如果您想了解我正在处理的数据类型的更多上下文,请告诉我,因为我不知道我提供的信息有多大帮助。问题似乎是,您传递给第二个
    字符串的格式说明符。format
    调用需要八个值(索引0到7)而你只通过了7次(1次姓名,5次分数,1次平均分)。您的格式说明符应为:

    {0,20}{1,5}{2,5}{3,5}{4,5}{5,5}{6,20}

    而不是

    {0,20}{1,5}{2,5}{3,5}{4,5}{5,5}{6,5}{7,20}


    1.错误信息是什么?2。您正在为绘制
    字符串的位置指定X和Y坐标。如果你想让每一行在页面的下方更远,那么Y坐标就需要增加。您正在指定每列的宽度和对齐方式。正宽度表示右对齐,负宽度表示左对齐。如果您有五列宽度为5的分数,那么这些列的标题需要为5x5+4=29,而您只指定了20。不要反复创建
    Font
    对象。它们都是相同的,所以只需创建一个并重用它。另外,当你处理完它时,你应该处理掉它。为此,使用
    语句创建一个
    ,然后它将隐式地放置在块的末尾。关于增加绘制记录的Y坐标,因为您处于
    For循环中,显然,要做的事情是将循环计数器乘以行高,然后将其添加到基Y值中。对于等待,我深表歉意。1.该异常是一个System.Format异常,其内容为“索引(基于零的)必须大于或等于零且小于参数列表的大小”。此答案修复了该异常,但是所有数据仍落在一行上,并且前两个标题仍然拼错