C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[3]: NullReferenceExceptionについて


(過去ログ 95 を表示中)

[トピック内 6 記事 (1 - 6 表示)]  << 0 >>

■56709 / inTopicNo.1)  NullReferenceExceptionについて
  
□投稿者/ kota (1回)-(2011/01/27(Thu) 10:00:00)

分類:[VB.NET/VB2005 以降] 

こんにちは、以下の現象で悩んでいます。

フォームの上にラベルを2つとボタン1つを貼り付けます、名前はデフォルトのままです。
次のコードを書きます。

    Private Function Label(ByVal index As Integer) As Label
        Return DirectCast(Me.Controls("Label" & index.ToString), Label)
    End Function


    Private Sub Button1_Click(ByVal sender As System.Object, _
                   ByVal e As System.EventArgs) Handles Button1.Click
        Label1.Text = Label(2).Text
    End Sub

ボタンを押すと、正常に実行されてLabel1のテキストは『Label2』と変わります。

今度はコードは変えずに、フォームの上にGroupBoxを一つ置いて、その上に
2つのLabelを置きます。
ボタンを押すと
 Label1.Text = Label(2).Text
の所で『NullReferenceException』のエラーが発生します。
これはGroupBoxだけではなくPanelやTabControlなどのコンテナに
載せても同じエラーになります。

ILが読めれば何とかなるのですがあいにく読めません。^^;
「なぜこんなコードを書くのだ」と言うことではなく、なぜエラーになるのだろう
と言うことを知りたいと思います。
よろしく。

引用返信 編集キー/
■56710 / inTopicNo.2)  Re[1]: NullReferenceExceptionについて
□投稿者/ Hongliang (750回)-(2011/01/27(Thu) 10:11:12)
Control.Controls プロパティは、自分の直接の子供となるコントロールしか格納していません。
Label を GroupBox の中に入れた場合、
Form -> GroupBox -> Label
という親子関係になり、Form.Controls に GroupBox が、GroupBox.Controls に Label が格納されることになります。
ですから、Me.Controls で直接孫コントロールを検索することはできません。
引用返信 編集キー/
■56711 / inTopicNo.3)  Re[1]: NullReferenceExceptionについて
□投稿者/ 囚人 (581回)-(2011/01/27(Thu) 10:14:45)
Me の Controls じゃなく、GroupBox の Controls にしないと駄目なんじゃないです?
引用返信 編集キー/
■56713 / inTopicNo.4)  Re[2]: NullReferenceExceptionについて
□投稿者/ kota (2回)-(2011/01/27(Thu) 10:41:37)
No56710 (Hongliang さん) に返信
「疑問氷解」
 コードを修正してエラーなく動作することを確認しました。
 ありがとうございました。
解決済み
引用返信 編集キー/
■56714 / inTopicNo.5)  Re[2]: NullReferenceExceptionについて
□投稿者/ kota (3回)-(2011/01/27(Thu) 11:00:11)
No56711 (囚人 さん) に返信
おっしゃる通りで、よく考えれば当然のことでした。
「未熟実感」です。
ありがとうございました。
引用返信 編集キー/
■56729 / inTopicNo.6)  Re[3]: NullReferenceExceptionについて
□投稿者/ kota (4回)-(2011/01/28(Fri) 11:43:51)
申し訳ない、解決済みです。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -