C# 我的标签宽度变为负数

C# 我的标签宽度变为负数,c#,winforms,C#,Winforms,我正在编写自己的图表,因为预定义的图表无法处理我想要使用的值类型。对于线条,我使用不同宽度的彩色标签。 要打印我正在使用的图表,请执行以下操作: labelSize = new Size(); labelSize.Height = 35; Size maxSize = new Size(214783647, 500); labelSize.Width = Convert.ToInt32(ShiftPts[i + 1].timeint - ShiftPts[i].timeint); Label

我正在编写自己的图表,因为预定义的图表无法处理我想要使用的值类型。对于线条,我使用不同宽度的彩色标签。 要打印我正在使用的图表,请执行以下操作:

labelSize = new Size();
labelSize.Height = 35;
Size maxSize = new Size(214783647, 500);

labelSize.Width = Convert.ToInt32(ShiftPts[i + 1].timeint - ShiftPts[i].timeint);
Label l1 = new Label();
l1.MaximumSize = maxSize;
l1.BackColor = Color.Yellow;
Point LabelPoint = new Point(tempStartX, StartPositionY);
//Point LabelPoint = new Point(tempStartX, StartPositionY);
l1.Size = labelSize;
l1.Location = LabelPoint;
l1.Text = ShiftPts[i].Status;
tempStartX = tempStartX + labelSize.Width;

BoxLine.Add(l1);

tempStartX
变量是一个
int
,您可以在每个循环周期中看到该变量的增加。这个变量的问题是,由于标签的宽度,它变为负值。每当我试图指定一个大于390的宽度时,宽度就会变成负值。为什么会发生这种情况?

如果
shiftptts[i+1]。timeint
小于
shiftptpts[i]。timeint
标签大小。宽度
将为负值。然后将该值分配给
tempStartX

因为这似乎是唯一可以进行减法的地方,所以这可能是变量设置为负值的唯一原因


另一种可能是
tempStartX
已经是负数。

您试过调试它吗?
ShiftPts[i]中有什么内容。timeint
?如果该值是一个大数字,它将导致负标签宽度。是的,我一直在调试它。而且可能是大数字,是的。为什么这会导致负宽度?ShiftPts[i+1]。timein永远不会小于ShiftPts[i]。timeint它们代表时间,所以它们总是增加“宽度为负”…这意味着在调试中,您可以看到
标签大小。宽度
变为负值?如果是这样的话,具体发生在哪条线上?如果你的意思是其他的,请详细说明。正如注释中提到的
ShiftPts[i+1]。timeint
,永远不会小于
ShiftPts[i]。timeint
@JakobDanielsson你确定吗?这是你在代码中减法的唯一地方。也有可能
tempStartX
已经为负值。你查过了吗?您的代码示例没有显示它在使用之前是如何设置的。谢谢,您是对的,我以为我在
ShiftPts
中对元素进行了排序,但显然我错了。谢谢大家!@JakobDanielsson哈哈,很高兴这有帮助。