System.Drawing.pen-将标签放置在形式上时,线路消失



我想在我的表单上绘制文本框/标签,并与线路连接 - 基于我存储在数据表中的数据(" 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处理程序中的繁重举重可以大大减慢应用程序。

最新更新