我想在我的表单上绘制文本框/标签,并与线路连接 - 基于我存储在数据表中的数据(" treedata")。如果我使用以下代码,一切正常:
For i = 0 To treedata.Rows.Count - 1
Dim tb As New TextBox
hor = treedata.Rows(i)(11)
vern = ver + 120 * treedata.Rows(i)(4)
tb.Text = "sometext"
tb.Location = New Point(hor, vern)
Form8.Controls.Add(tb)
posofmodif = treedata.Rows(i)(10)
vero = treedata.Rows(i)(6)
Dim myPen As New System.Drawing.Pen(System.Drawing.Color.Green)
Dim formGraphics As System.Drawing.Graphics
myPen.SetLineCap(LineCap.RoundAnchor, LineCap.ArrowAnchor, DashCap.Flat)
formGraphics = Form8.CreateGraphics()
formGraphics.DrawLine(myPen, Convert.ToSingle(posofmodif), Convert.ToSingle(vero), Convert.ToSingle(hor), Convert.ToSingle(vern))
myPen.Dispose()
formGraphics.Dispose()
Next
但是,我想使用标签而不是文本框,因为在这种情况下,使用较重的文本框没有意义。但是当我简单地替换
时Dim tb As New TextBox
Dim tb As New Label
标签确实如预期出现在表单上,但连接它们的线仅出现片刻,然后变成不可见的。
我首先认为问题可能是由标签上方或低于行引起的,但是即使我确保没有线路越过任何标签,它也会发生。
有人知道我该怎么做才能避免这种情况?
这是您的问题:Form8.CreateGraphics()
。该方法是挥发性的,因为它创建了一个无法在其使用的范围内生存的Graphics
实例。
您需要使用Paint
事件来进行任何打算绘制的控制。形式,标签...无论是什么。Paint
事件提供了一个Graphics
对象供您使用,只要需要刷新图纸,它就会被调用。
因为事件经常发射,您需要注意自己在那里所做的事情。Paint
处理程序中的繁重举重可以大大减慢应用程序。