Vb.net 在哪里声明引用VB对象的公共对象?

Vb.net 在哪里声明引用VB对象的公共对象?,vb.net,object,global,public,declare,Vb.net,Object,Global,Public,Declare,我第一次使用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()

我第一次使用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
。在控件的
Paint
事件处理程序中绘制控件,或者,如果合适,创建自定义控件并重写
OnPaint
方法。将表示图形的数据存储在一个或多个字段中,并且每当您想要更改图形时,将这些字段设置为d调用控件上的
Invalidate

Private lineStart作为点
专用线端点作为点
专用副抽绳(起点为点,[终点]终点为点)
lineStart=开始
lineEnd=[end]
PictureBox1.Invalidate()
端接头
私有子PictureBox1_Paint(发送方作为对象,e作为事件参数)处理PictureBox1.Paint
e、 图形.绘图线(Pens.Red、lineStart、lineEnd)
端接头

一般来说,最好指定要失效的区域,而不是不指定参数并使整个控件失效。实际上,在屏幕上绘制像素是缓慢的部分,因此最好将其保持在最小值。我将把这部分留给您,但您可能希望查看更多信息。注意在,如果您要移动一行,您需要使包含旧行的区域和将包含新行的区域无效。在这种情况下,您可以使用不同的区域多次调用
invalidate
,或者您可以将这些区域合并为一个
区域
,并调用一次。

如此不同的视图,但很有趣

我无法测试它:( 中的e.object有问题

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

BC30456 Visual Basic“Graphics”不是“EventArgs”的成员。

您根本不必使用
CreateGraphics()
。从
PictureBox.Paint
事件的处理程序调用该代码。修改
Line
方法以接受图形对象(
专用子行(g为图形,a为点,B为点)
),然后传递
Paint
处理程序的
PaintEventArgs
参数的
e.Graphics
对象。(顺便说一句,您没有指定点值的设置位置。此外,您使用的是
B
点,而不是
y
,该方法中不存在此点)。不要处理您的方法接收的图形对象,该对象将在其他地方处理。