プロが教える店舗&オフィスのセキュリティ対策術

textBox isNot Nothing とは
どういうことですか
わかりやすく教えてください

あるサイトに以下のコードが書かれていました
ここにある If cTextBox IsNot Nothing Then
とはどういうことを意味しているのでしょうか

If cTextBox IsNot Nothing Then
MessageBox.Show(cTextBox.Name & " の Text を変更しました")
End If

A 回答 (3件)

#1 です。

#2 の方が書かれている通りなのですが、御質問の例に沿って「オブジェクトを指していない時の具体例」を補足します。
変数 cTextBox に Nothing が入っている状態というのは、以下のパターンのいずれかになると考えられます。

1.変数 cTextBox が宣言だけされていて、実体が作成されていない状態。

 Dim cTextBox As TextBox

 となっているだけの時。
 この後、「If cTextBox IsNot Nothing Then」の行に到達する前に、

 cTextBox = New TextBox()

 等とコーディングされておれば、オブジェクト実体を作って変数 cTextBox に参照させている事になりますので、メッセージボックスが正しく表示されます。

2.cTextBox を使い終わって Nothing を入れた後。

 cTextBox = Nothing

 と書いた後です。このように記載すると、cTextBox はオブジェクトの実体との参照を切断します。

 以下蛇足ですが、#2の方が書かれているように事前に Dispose を呼び出すのがセオリーです。

 cTextBox.Dispose()
 cTextBox = Nothing

 但しフォームの子供として正しくこの TextBox を追加している場合には、Dispose する必要はありません(フォームが閉じられた時に自動で呼ばれます)。
    • good
    • 1

参照変数の仕組みは、どの入門本でも最初の方に書いてある


基礎知識だと思いますが。
http://msdn.microsoft.com/ja-jp/library/dd314344 …
> 参照型のデータでは値型とは異なり、その変数を宣言した
> からといって、そのデータ型にみあう領域が確保される訳
> ではありません。

参照変数はメモリ上のインスタンスのアドレスを格納
します。参照するまではアドレスを格納できる入れ物を
用意したに過ぎません。
つまり中身は空です。それを Nothing で表します。

通常は画面のテキストボックスなどは、デザイン時に
貼り付けたらそのままですので、意識する必要は無い
でしょう。(VBが裏で自動でプログラムを書いています)
しかし、自分で動的にコントロールを増減させたり
する時は、処理対象のオブジェクトがまだメモリ上に
存在しない場合も出てくるでしょう。その場合は、
まだどこも参照していないので Nothing になります。

まぁ、もっと使うのがフォームでしょうね。複数画面を
扱うアプリでは、各画面を新しくロードしたり、破棄
したりを頻繁に行いますので。
ただし、アドレス参照はしているが、アドレスの先の
インスタンスは破棄した状態もありえます。
その場合は Control.IsDisposed プロパティもあわせて
チェックします。
http://msdn.microsoft.com/ja-jp/library/system.w …
    • good
    • 0

cTextBox がちゃんと実際のオブジェクト(変数名から推定して TextBox 型のオブジェクト)を指しているかどうかを確認しています。


実際のオブジェクトを指していない場合には、オブジェクトのプロパティにアクセスしようとしてエラーになってしまうので(cTextBox.Name の部分でエラーが発生してしまうので)。
実際のオブジェクトを指している事が明らかな場合には、不要な条件式ですね。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
よくわからないのですが実際のオブジェクトを指していないとは
具体的にどのような時のことをさすのでしょうか
textboxがenableにプログラムによって変更されたとか
なのでしょうか 
よくわかりませんもしよろしかったらオブジェクトを指していないときの
具体例を教えていただけませんでしょうか


お忙しい中ご回答いただきありがとうござました。

お礼日時:2011/09/27 17:33

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!