System.Drawing.Pen - 标签放置在表单

时间:2017-08-30 11:24:46

标签: vb.net winforms system.drawing

我想在代码中在我的表单上绘制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

标签确实按预期显示在表单上,​​但连接它们的线条只显示片刻然后变为不可见。

我首先想到的问题可能是由于标签位于线条之上或之下,但即使我确保没有线条穿过任何标签,也会发生。

有没有人知道我可以做些什么来避免这种情况?

1 个答案:

答案 0 :(得分:3)

这是您的问题:table, td { border: 1px solid black; }。该方法是易变的,因为它创建了一个Form8.CreateGraphics()实例,该实例不能在使用它的范围内存活。

您需要将Graphics事件用于您想要绘制的任何控件。形式,标签......不管是什么。 Paint事件提供了一个Paint对象供您使用,每当需要刷新图形时,它都会被调用。

因为事件频繁发生,你需要注意你在那里做的事情。 Graphics处理程序中的繁重工作可能会大大降低应用程序的速度。