我正在利用“Label”类中的Get String函数将行打印在一个位图上。程序编译正常,前一个表单正确传递LabelQueue(在我尝试打印位图之前,它看起来没有问题)。下面是这个特定初始化程序/构造函数的所有代码。错误的代码行是“c ++”之前函数的最后三行。
如果您需要我添加更多必要的代码,请告诉我。
我收到一个IndexOutofRange异常,声称它超出了数组的范围。
private LabelQueue lq;
public Print(LabelQueue queue)
{
InitializeComponent();
lq = queue;
pictureBox1.Image = new Bitmap(2550, 3300);
System.Drawing.Graphics formGraphics = this.CreateGraphics();
System.Drawing.Font textFont = new System.Drawing.Font("Times New Roman", 8);
System.Drawing.SolidBrush textBrush = new System.Drawing.SolidBrush(System.Drawing.Color.Black);
System.Drawing.StringFormat textFormat = new System.Drawing.StringFormat();
int x, y, c = 0;
while (c < 30)
{
// Get coordinates for where to put values.
x = ((c % 3) * 600) + 300;
// Accounts for column gap
if (c % 3 > 0)
x = x + ((c % 3) - 1) * 75;
y = ((c % 10) * 270) + 300;
string firstLine, secondLine, thirdLine;
firstLine = lq.labels[c].GetLastName() + ", " + lq.labels[c].GetFirstName() + " " + lq.labels[c].GetMiddleName();
secondLine = lq.labels[c].GetNewStreet();
thirdLine = lq.labels[c].GetNewCity() + ", " + lq.labels[c].GetNewState() + lq.labels[c].GetNewZIP() + lq.labels[c].GetNewCountry();
formGraphics.DrawString(firstLine, textFont, textBrush, x, y, textFormat); // Line turning up the error
formGraphics.DrawString(firstLine, textFont, textBrush, x, y + 10, textFormat); // Naturally, both these lines would need to be fixed too
formGraphics.DrawString(firstLine, textFont, textBrush, x, y + 20, textFormat);
c++;
}
}
答案 0 :(得分:0)
如果没有a good, minimal, complete code example可靠地证明问题,就无法确切知道您需要的确切修复。
但是,根据此问题的信息和到目前为止的评论,您似乎并没有正确限制循环。 while
语句应如下所示:
while (c < lq.Count())
请注意,上面使用了Enumerable.Count()
扩展方法。我选择了这个作为答案,因为你没有包含你的LabelQueue
对象的声明/实现,所以没有办法确定正确的语法是什么,但扩展方法可能会起作用,因为几乎任何支持索引器的合理集合类型都会实现某些接口,允许Enumerable.Count()
方法正常工作。
也就是说,您的类型可能具有Count
属性,您可以使用该属性代替Count()
扩展方法。两者都可以同样有效。
最后,为了将来参考,可以回答您自己的问题。这只是你的答案应该成为一个答案。即它需要清楚地解释什么是错的,以及你做了什么来解决它。写作“问题是固定的”并不算作答案。
就此而言,如果你不喜欢我在这里的答案,你想写自己的答案,你仍然可以这样做。如果您愿意,您甚至可以接受自己的答案,而不是我的答案。只要确保它是一个真正的答案。