我是.net的新手,我正在尽力去理解Nuances(或Nuisance)。我正在尝试在表单上打印文本。我确实找到了很多关于Graphics类,DrawString()等的例子。不幸的是,我无法让它们中的任何一个工作。对我来说,绊脚石似乎是错误“NullReferenceException”和/或警告“在分配之前的变量用法”。在" http://msdn.microsoft.com/en-US/library/76c5db29(v=vs.80).aspx?cs-save-lang=1&cs-lang=vb#code-snippet-1"中找到了一个例子。 vs2005显示警告"变量' myE'在被赋值之前使用。 null referene excpetion可能会在运行时产生,当我运行NullReferenceException时,会引发" e.Graphics.DrawString(drawString,drawFont,drawBrush,drawPoint)"我该如何解决这个问题?
Public Class Form1
Public Sub DrawStringPointF(ByVal e As PaintEventArgs)
Dim drawString As [String] = "Sample Text"
Dim drawFont As New Font("Arial", 16)
Dim drawBrush As New SolidBrush(Color.Black)
Dim drawPoint As New PointF(150.0F, 150.0F)
e.Graphics.DrawString(drawString, drawFont,drawBrush, drawPoint)
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim myE As PaintEventArgs
DrawStringPointF(myE)
End Sub
End Class
答案 0 :(得分:3)
你不能这样做。
相反,处理Paint
事件并绘制您需要的所有内容。
要触发重绘,请致电Invalidate()
。
答案 1 :(得分:0)
您的问题比您的问题更广泛。 您正在询问空引用异常是什么;其他地方已多次回答这个问题。 NRE(NullReferenceException)指的是一个未定义的变量
我们可以将记忆视为一个巨大的,开放的停车场。使用这样的语句定义变量时,
Dim myObject as Integer
...您要求停车场内有一个或多个停车位。但是,你所做的只是声明这个地点是你的,但不是它的内容。要给它一个值,只需使用equals运算符。
myObject = 100
简单对象(称为基元)(如字符串,数字和字符)在未定义时具有隐含值。例如,如果整数没有值,则假定它们为零。
在你的程序中,当你得到一个NRE时,将鼠标悬停在函数中的每个参数上以及调用该函数的对象。如果其中任何一个声称值为{{ 1}},那就是你的问题。您已为对象保留了空间,但尚未为其指定值。
正如SLaks所说,您的具体问题与您调用该方法的方式有关,但如果不清楚Nothing
的含义,则可能无法正确解决基本问题>
最后,让我们看看特别是您的代码。你打电话
Nothing
。
在本声明中,您在内存中预留了空间 - 也就是说,声称我们之前谈过的停车位。但是,它没有价值!它是空的。程序无法正常运行,因为您要告诉它对不存在的事物执行操作。要解决此问题,请使用Dim myE as PaintEventArgs
运算符。在创建新对象时,首先将它们保留在内存中(New
实际上代表"在内存中定义")然后使用Dim
运算符为它们赋值。你会看到类似的东西:
New
Dim myObj As Object
你也可以内联:
myObj = New Object()
当您尝试使用PaintEventArgs执行此操作时,您会发现这很不可能。 PaintEventArgs需要从Windows窗体控件中获取的信息。您编写的方法需要处理事件。这篇文章太长了是的,所以希望其他人可以解释事件以及他们如何与方法相关。基本上,每个控件(文本框,图像,甚至图片本身)每次引发事件都会引发一个事件#34;到屏幕。你可以"处理"那件事;或者在发生时采取行动:
Dim myObj As Object = New Object()
您声明每当myControl为OnPaint引发事件时,它将使用控件提供的参数调用此方法。 您不能简单地从其他地方替换所需的参数。为了使其正常工作,必须从您想要绘制的控件传递事件参数。
我希望这会有所帮助。如果我不清楚,请告诉我。