Nullについてのエラー への返答

投稿で使用できる特殊コードの説明。(別タブで開きます。)
本名は入力しないようにしましょう。
投稿した後で削除するときに使うパスワードです。返答があった後は削除できません。
返答する人が目安にします。相手が小学生か社会人かで返答の仕方も変わります。
最初の投稿が質問の場合、質問者が解決時にチェックしてください。(以降も追加書き込み・返信は可能です。)
※「過去ログ」について書くときはその過去ログのURLも書いてください。

以下の返答は逆順(新しい順)に並んでいます。

投稿者 るきお  (社会人) 投稿日時 2012/6/14 20:23:38
クラスのメソッドやプロパティの大多数はインスタンスに対して使用する必要があります。
インスタンスがない状態でメソッドやプロパティを使用するとNullReferenceExceptionが発生します。
たとえば、次の例ではStringクラスのインスタンスがない状態でLengthプロパティを使おうとしているのでNullReferenceExceptionが発生します。
Dim St As String
MsgBox(St.Length)


GraphicsクラスのDrawLineメソッドもそうです。
インスタンスをどのように取得するかの方法はさまざまです。よく見かけるのはNewを使用する方法ですが、今回はNewの出番はありません。

このあたりの事情は以下の記事で解説しているので参考にしてください。
初級講座第5回 メソッドと関数
http://homepage1.nifty.com/rucio/main/dotnet/shokyu/standard5.htm

初級講座第9回 クラスの使い方
http://homepage1.nifty.com/rucio/main/dotnet/shokyu/standard9.htm


今回の例を簡単に解決する例を紹介します。
この例はPictureBox1に対して描画を行う場合です。
Dim drawpen As Pen = Pens.Red
Dim ixx1 As Single = 10
Dim iyy1 As Single = 10
Dim ixx2 As Single = 100
Dim iyy2 As Single = 120

Dim g As Drawing.Graphics
g = PictureBox1.CreateGraphics
g.DrawLine(drawpen, ixx1, iyy1, ixx2, iyy2)


これでインスタンスの問題は解決しますが、グラフィックのセオリーからははずれています。
セオリーではPaintイベントで描画を実行することになっておりその場合は次のようにします。
Private Sub PictureBox1_Paint(sender As Object, e As System.Windows.Forms.PaintEventArgs) Handles PictureBox1.Paint
    Dim drawpen As Pen = Pens.Red
    Dim ixx1 As Single = 10
    Dim iyy1 As Single = 10
    Dim ixx2 As Single = 100
    Dim iyy2 As Single = 120
    e.Graphics.DrawLine(drawpen, ixx1, iyy1, ixx2, iyy2)
End Sub

投稿者 shu  (社会人) 投稿日時 2012/6/14 17:16:41
Dim g~
g.Drawing~
の間にgに何かインスタンスを代入しましょう。

投稿者 VB初心者  (学生) 投稿日時 2012/6/14 16:30:42
学校でVBのプログラムの勉強をしています.
作成しているプログラムなんですが,


Dim g As Drawing.Graphics
        g.DrawLine(drawpen, ixx1, iyy1, ixx2, iyy2) ←ここに変数 'g' は、値が割り当てられる前に使用されています。Null 参照の例外が実行時に発生する可能性があります。


とエラーが出ます.
どなたか教えていただけないでしょうか?
null refarence exceptionはハンドルされませんでした.とでています.