【问题标题】:System.Drawing.Pen - lines disappear when Labels are placed on FormSystem.Drawing.Pen - 将标签放置在表单上时线条消失
【发布时间】:2018-02-08 02:12:15
【问题描述】:

我想用代码在我的表单上绘制文本框/标签,并用线将它们连接起来——基于我存储在数据表(“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,因为在这种情况下使用较重的 TextBoxes 是没有意义的。但是当我简单地替换

Dim tb As New TextBox

通过

Dim tb As New Label

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

我最初认为问题可能是由于标签在线条上方或下方引起的,但即使我确保没有线条穿过任何标签,它也会发生。

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

【问题讨论】:

  • 你在哪里画画?如果您还没有这样做,请尝试在 Form.Paint 事件中这样做。

标签: vb.net winforms system.drawing


【解决方案1】:

这是你的问题:Form8.CreateGraphics()。该方法是不稳定的,因为它创建了一个在其使用范围内无法生存的Graphics 实例。

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

由于该事件经常触发,因此您需要注意您在那里所做的事情。 Paint 处理程序中的繁重工作可能会大大降低应用程序的速度。

【讨论】:

  • 谢谢 - 到目前为止,我还没有使用绘画事件,而只是另一个 Sub 来绘制。使用它可以工作的 Paint 事件....现在我只需要弄清楚如何优雅地将我的数据表传递给事件处理程序(而不仅仅是将其设置为 public)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-09-05
  • 2013-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多