我想在代码中在我的表单上绘制TextBoxes / Labels并使用行连接它们 - 基于我存储在数据表中的数据(“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
但是我想使用标签而不是TextBoxes,因为在这种情况下使用较重的TextBox是没有意义的。但是,当我简单地替换
Dim tb As New TextBox
通过
Dim tb As New Label
标签确实按预期显示在表单上,但连接它们的线条只显示片刻然后变为不可见。
我首先想到的问题可能是由于标签位于线条之上或之下,但即使我确保没有线条穿过任何标签,也会发生。
有没有人知道我可以做些什么来避免这种情况?
答案 0 :(得分:3)
这是您的问题:table, td {
border: 1px solid black;
}
。该方法是易变的,因为它创建了一个Form8.CreateGraphics()
实例,该实例不能在使用它的范围内存活。
您需要将Graphics
事件用于您想要绘制的任何控件。形式,标签......不管是什么。 Paint
事件提供了一个Paint
对象供您使用,每当需要刷新图形时,它都会被调用。
因为事件频繁发生,你需要注意你在那里做的事情。 Graphics
处理程序中的繁重工作可能会大大降低应用程序的速度。