【问题标题】:Where to declare a public object which refer to a VB object?在哪里声明一个引用 VB 对象的公共对象?
【发布时间】:2021-04-02 14:01:15
【问题描述】:

我第一次使用 Visual Studio 和 VB.net。

有人能解释一下在哪里声明一个引用 VB 对象的公共对象吗?

这段代码运行良好:

Public Class Form1

    Private ThePen As New System.Drawing.Pen(Color.Red)

    Private Sub Line(A As Point, y As Point)
       Dim NewGraphic As Graphics = PictureBox1.CreateGraphics()
       NewGraphic.DrawLine(ThePen, A, B)
       NewGraphic.Dispose()
    End Sub

End Class

但我只想公开声明一次

Dim NewGraphic As Graphics = PictureBox1.CreateGraphics()

一开始我尝试声明它,但我的对象PictureBox1似乎还没有加载(所以,无法访问PictureBox1.CreateGraphics()

所以我尝试了

Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

但是我不能在里面声明公共变量:(

【问题讨论】:

  • 您根本不必使用CreateGraphics()。从PictureBox.Paint 事件的处理程序调用该代码。修改 Line 方法以接受 Graphics 对象 (Private Sub Line(g as Graphics, A As Point, B As Point)),然后传递 Paint 处理程序的 PaintEventArgs 参数的 e.Graphics 对象。 (顺便说一句,您没有指定 Point 值的设置位置。此外,您使用的是 B Point,而不是 y,它在该方法中不存在)。不要处理您的方法接收到的 Graphics 对象,它会在其他地方处理。

标签: vb.net object global public declare


【解决方案1】:

如此不同的观点,但很有趣!

我无法测试它:( e有问题。对象在

e.Graphics.DrawLine(Pens.Red, lineStart, lineEnd)

BC30456 Visual Basic 'Graphics' 不是 'EventArgs' 的成员。

【讨论】:

    【解决方案2】:

    你几乎不应该打电话给CreateGraphics。在其Paint 事件处理程序中绘制一个控件,或者,如果合适,创建一个自定义控件并覆盖OnPaint 方法。将表示绘图的数据存储在一个或多个字段中,并且在您想要更改绘图时,设置这些字段并在控件上调用Invalidate

    Private lineStart As Point
    Private lineEnd As Point
    
    Private Sub DrawLine(start As Point, [end] as Point)
        lineStart = start
        lineEnd = [end]
        PictureBox1.Invalidate()
    End Sub
    
    Private Sub PictureBox1_Paint(sender As Object, e As EventArgs) Handles PictureBox1.Paint
        e.Graphics.DrawLine(Pens.Red, lineStart, lineEnd)
    End Sub
    

    一般来说,最好指定要无效的区域,而不是不指定参数并使整个控件无效。它实际上是将像素绘制到屏幕上,这是较慢的部分,因此最好将其保持在最低限度。我会把这部分留给你,但你可能想查看this 以获取更多信息。请注意,如果您要移动一条线,则需要使包含旧线的区域和将包含新线的区域无效。在这种情况下,您可以多次调用Invalidate与不同的区域,也可以将这些区域合并为一个Region并调用一次。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-14
      • 2013-11-30
      • 2019-08-02
      • 1970-01-01
      • 1970-01-01
      • 2015-03-17
      相关资源
      最近更新 更多