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

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

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

エラーになる

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

■86812 / inTopicNo.1)  エラーになる
  
□投稿者/ FRMC (6回)-(2018/03/21(Wed) 10:19:03)

分類:[.NET 全般] 

Private Sub ToolStripMenuItemPointDelete_Click(sender As Object, e As EventArgs) Handles ToolStripMenuItemPointDelete.Click
Dim iPic As exPictureBox = Me.Controls(iLabel.Name)
If iPic.Controls.Count > 2 Then '頂点が2個以上なら
Dim i As Integer = iLabel.Tag
Me.ExPictureBox1.PointN.RemoveAt(i) '指定した頂点の情報削除
Me.ExPictureBox1.Controls.Remove(iLabel) '指定した頂点の削除
Call 頂点の初期化(iPic)
Call 線の描画(iPic)
End If
End Sub

をやると、
型 'System.NullReferenceException' のハンドルされていない例外が .exe で発生しました

追加情報:オブジェクト参照がオブジェクト インスタンスに設定されていません。
となります。

何か解決する方法はないのでしょうか。
検索しましたがそれらしい解決に至るものはありませんでした。

引用返信 編集キー/
■86813 / inTopicNo.2)  Re[1]: エラーになる
□投稿者/ Azulean (929回)-(2018/03/21(Wed) 11:20:12)
No86812 (FRMC さん) に返信
> 型 'System.NullReferenceException' のハンドルされていない例外が .exe で発生しました

それが発生したときにそれぞれの変数にカーソルを合わせてみて、Nothinng となっているものを見つけてください。
Nothing になっているものに対してそのメンバーにアクセスするコードを実行すると今回のように NullReferenceException が発生します。

よって、以下のいずれかが必要となります。

1.Nothing とならないようなコードを書く。
2.Nothing となる場合は実行しないなどの分岐(If 文)を書く。


おそらく、今回のコードでは iPic が Nothing となっているのだと予想されます。

( ) 内の iLabel.Name を渡すことが適切かどうか、それは exPictureBox 型を示す名前かどうかをまずは疑ってください。
それが正しい場合、Form に直接貼り付けているものか否かを確認してください。(Controls プロパティはその対象に直接貼り付けられているもののみ対象となる)
引用返信 編集キー/
■86822 / inTopicNo.3)  Re[2]: エラーになる
□投稿者/ FRMC (7回)-(2018/03/23(Fri) 15:11:01)
No86813 (Azulean さん) に返信
> ■No86812 (FRMC さん) に返信
>>型 'System.NullReferenceException' のハンドルされていない例外が .exe で発生しました
>
> それが発生したときにそれぞれの変数にカーソルを合わせてみて、Nothinng となっているものを見つけてください。
> Nothing になっているものに対してそのメンバーにアクセスするコードを実行すると今回のように NullReferenceException が発生します。
>
> よって、以下のいずれかが必要となります。
>
> 1.Nothing とならないようなコードを書く。
> 2.Nothing となる場合は実行しないなどの分岐(If 文)を書く。
>
>
> おそらく、今回のコードでは iPic が Nothing となっているのだと予想されます。
>
> ( ) 内の iLabel.Name を渡すことが適切かどうか、それは exPictureBox 型を示す名前かどうかをまずは疑ってください。
> それが正しい場合、Form に直接貼り付けているものか否かを確認してください。(Controls プロパティはその対象に直接貼り付けられているもののみ対象となる)

iPicがNothingになっていることは既にわかっています。 

おっしゃっている1.は、やり方がわからず、完全にSTOPしています。
2.は、実行しないとなると逆にエラーになるため、(つまりどの方法を使ってもiPicは常にNothing状態)できませんでした。
引用返信 編集キー/
■86824 / inTopicNo.4)  Re[3]: エラーになる
□投稿者/ Azulean (930回)-(2018/03/23(Fri) 16:09:28)
No86822 (FRMC さん) に返信
> iPicがNothingになっていることは既にわかっています。 

であれば、そう書いた方が良いでしょうね。

> おっしゃっている1.は、やり方がわからず、完全にSTOPしています。
> 2.は、実行しないとなると逆にエラーになるため、(つまりどの方法を使ってもiPicは常にNothing状態)できませんでした。

現段階で書かれている内容では具体的な手段の提示は難しいです。
個別ケースの個別対応が必要なものですから、Web で探しても見つかるものではありませんので、質問者側の情報共有が必要となります。

少なくとも以下を説明してもらわないと難しいでしょうね。

・フォーム内のコントロールがどのような構造になっているのか
 Form に直接貼られているのか、Panel や TabControl の上に貼り付けられているのか、目的のコントロールまでの階層を示す必要がある。
 表示メニューのその他のウィンドウあたりにある、ドキュメントアウトラインを見ると、階層が見えるかもしれません。

・iLabel.Name がどのような値となるのか
 Name プロパティなので、デザイナーで名付けた Label1 や iLabel になっているはずですが。

・iLabel というコントロールは何型なのか
 名前からすると Label 型のように見受けられますが、それだと exPitureBox を得るために Controls(iLabel.Name) としているのは何かおかしいです。
 Controls(iLabel.Name) は iLabel.Name の文字列を元にコントロールを得るので、結果は iLabel を得ることになるため。


引用返信 編集キー/
■86825 / inTopicNo.5)  Re[4]: エラーになる
□投稿者/ FRMC (8回)-(2018/03/23(Fri) 20:27:08)
No86824 (Azulean さん) に返信
> ■No86822 (FRMC さん) に返信
>>iPicがNothingになっていることは既にわかっています。 
>
> であれば、そう書いた方が良いでしょうね。
>
>>おっしゃっている1.は、やり方がわからず、完全にSTOPしています。
>>2.は、実行しないとなると逆にエラーになるため、(つまりどの方法を使ってもiPicは常にNothing状態)できませんでした。
>
> 現段階で書かれている内容では具体的な手段の提示は難しいです。
> 個別ケースの個別対応が必要なものですから、Web で探しても見つがるものではありませんのて、質問者側の情報共有が必要どなります。
>
> 少なくとも以下を説明してもらわないと難しいでじょうね。
>
> ・フォーム内のコントロールがどのような構造になっでいるのか
>  Form に直接貼られているのか、Panel や TabControl の上に貼り付けられているのか、目的のコントロールまでの階層を示す必要がある。
>  表示メニューのその他のウィンドウあたりにある、ドキュメントアウトラインを見ると、階層が見えるかもしれません。
>
> ・iLabel.Name がどのような値となるのか
>  Name プロパティなので、デザイナーで名付けた Label1 や iLabel になっているはずですが。
>
> ・iLabel というコントロールは何型なのか
>  名前からすると Label 型のように見受けられますが、それだと exPitureBox を得るために Controls(iLabel.Name) としているのは何かおかしいです。
>  Controls(iLabel.Name) は iLabel.Name の文字列を元にコントロールを得るので、結果は iLabel を得ることになるため。

とりあえず今わかることは、

exPitureBoxはpanel上にあります。
今参考にしているのは、
https://blogs.yahoo.co.jp/gogowaten/12512794.html
です。こちらのコードを参考にし、現在作っています。

引用返信 編集キー/
■86826 / inTopicNo.6)  Re[5]: エラーになる
□投稿者/ Azulean (931回)-(2018/03/23(Fri) 21:00:53)
2018/03/23(Fri) 21:05:20 編集(投稿者)

引用( > で始まる行)は必要最小限にしましょう。

No86825 (FRMC さん) に返信
> exPitureBoxはpanel上にあります。

そうであれば、Me.Controls(iLabel.Name) ではなく、panel1.Controls(iLabel.Name) といったようにパネルの中を探すように書かないとダメです。

-----
複数コントロールを扱っている関係で複雑になっているので、初歩で取り組むには向いていないかもしれませんね、このサンプル。
あとは、Name プロパティの意味を無視したサンプルになっていますね。
引用返信 編集キー/
■86827 / inTopicNo.7)  Re[6]: エラーになる
□投稿者/ FRMC (9回)-(2018/03/24(Sat) 10:22:17)
No86826 (Azulean さん) に返信
> 2018/03/23(Fri) 21:05:20 編集(投稿者)
>
> そうであれば、Me.Controls(iLabel.Name) ではなく、panel1.Controls(iLabel.Name) といったようにパネルの中を探すように書かないとダメです。
>
> -----
> 複数コントロールを扱っている関係で複雑になっているので、初歩で取り組むには向いていないかもしれませんね、このサンプル。
> あとは、Name プロパティの意味を無視したサンプルになっていますね。

panel1.controlsとしたところでその部分でのエラーは消滅しました。
しかし、
If iPic.Controls.Count > 2 Then '頂点が2個以上なら
のところでまたしても同じく


型 'System.NullReferenceException' のハンドルされていない例外が .exe で発生しました

追加情報:オブジェクト参照がオブジェクト インスタンスに設定されていません。
となります。

これはどういうことなのでしょうか???

引用返信 編集キー/
■86828 / inTopicNo.8)  Re[7]: エラーになる
□投稿者/ shu (1104回)-(2018/03/24(Sat) 14:33:29)
No86827 (FRMC さん) に返信
>
> panel1.controlsとしたところでその部分でのエラーは消滅しました。
その部分とはどの部分?


> しかし、
> If iPic.Controls.Count > 2 Then '頂点が2個以上なら
> のところでまたしても同じく
これより前でエラーが発生していたのでしょうか?

>
> 型 'System.NullReferenceException' のハンドルされていない例外が .exe で発生しました
>
> 追加情報:オブジェクト参照がオブジェクト インスタンスに設定されていません。
> となります。
>
> これはどういうことなのでしょうか???
>
iPicがNothingか
iPic.ControlsがNothingなのだと思います。


iPic = panel1.controls(iLabel.Name)

の時点でiLabel.Nameの値が対象となるPictureBoxの名前と一致しているか確認してみて下さい。
デザインで配置しただけだとNameは同じものは作成されないので、Nameが同じコントロールを作りたいのなら
プログラム上でNameに設定をする必要があるかと思いますがそのような処理はされていますか?

panel1上にiLabelとiPicに設定したピクチャーボックスが配置されているとすると
Controls(Name)の形式でピクチャーボックスが取得出来る保証はありません。

実行中に処理を行うピクチャーボックスが変わることがあるのでしょうか?なければ直接コントロール名がフォームの
フィールド変数として定義されているので
例えば
ExPictureBox1に対してiPicで行っている処理を行えばよいです。



引用返信 編集キー/
■86830 / inTopicNo.9)  Re[7]: エラーになる
□投稿者/ Azulean (932回)-(2018/03/24(Sat) 20:11:06)
No86827 (FRMC さん) に返信
> これはどういうことなのでしょうか???

サンプルを改造していくという姿勢自体は否定しませんが、まずはサンプルをなるべくそのまま再現し、動く状態を目指しませんか?
今の時点では panel の中にあるなど、サンプルから変えて実現しようとしている形跡が見受けられます。
それがゆえに、サンプルから変えたところをコードも変えないといけなくなり、そして、コードを理解していないが故に、一歩進む度に質問すると言った状態=学習効率が悪い状態に陥っています。

そうではなく、サンプルを忠実に再現してから、少しずつ変えてみて、動く・動かないを観察し、コードの理解をしていくことを狙ってみませんか。
引用返信 編集キー/
■86832 / inTopicNo.10)  Re[8]: エラーになる
□投稿者/ FRMC (10回)-(2018/03/24(Sat) 22:53:44)
No86830 (Azulean さん) に返信
> ■No86827 (FRMC さん) に返信
>>これはどういうことなのでしょうか???
>
> サンプルを改造していくという姿勢自体は否定しませんが、まずはサンプルをなるべくそのまま再現し、動く状態を目指しませんか?
> 今の時点では panel の中にあるなど、サンプルから変えて実現しようとしている形跡が見受けられます。

panelの中にあるのは、pictureboxの上に重ねてexpictureboxを配置するため、pictureboxがスクロールできない問題を解決するためです。

> そうではなく、サンプルを忠実に再現してから、少しずつ変えてみて、動く・動かないを観察し、コードの理解をしていくことを狙ってみませんか。

少しずつ変えた中突如エラーに陥りバックアップも取っていない中の問題でしたので質問させていただきました。

引用返信 編集キー/
■86834 / inTopicNo.11)  Re[8]: エラーになる
□投稿者/ Azulean (934回)-(2018/03/24(Sat) 23:05:41)
2018/03/24(Sat) 23:05:58 編集(投稿者)

No86828 (shu さん) に返信
> の時点でiLabel.Nameの値が対象となるPictureBoxの名前と一致しているか確認してみて下さい。
> デザインで配置しただけだとNameは同じものは作成されないので、Nameが同じコントロールを作りたいのなら
> プログラム上でNameに設定をする必要があるかと思いますがそのような処理はされていますか?

No86825 で提示されているリンク先がそのようになっているそうです。
それを読んでいないと現状の質問には答えられないという回答者泣かせの流れです。。。


> 実行中に処理を行うピクチャーボックスが変わることがあるのでしょうか?なければ直接コントロール名がフォームの
> フィールド変数として定義されているので
> 例えば
> ExPictureBox1に対してiPicで行っている処理を行えばよいです。

サンプルが3キャンバスあるという妙に高難易度のものなので、それが通じないので困りどころです。。。

引用返信 編集キー/
■86835 / inTopicNo.12)  Re[9]: エラーになる
□投稿者/ Azulean (935回)-(2018/03/24(Sat) 23:10:35)
2018/03/24(Sat) 23:59:09 編集(投稿者)

No86832 (FRMC さん) に返信
> panelの中にあるのは、pictureboxの上に重ねてexpictureboxを配置するため、pictureboxがスクロールできない問題を解決するためです。

その改造の結果、ExPictureBox は1つになっていますか?それとも3つあるままですか?
1つになったのなら、iPic なんて使わずに、ExPictureBox1 というフィールド変数をそのまま使うべきです。

3つあるままなら、 No86827 で言われていた「panel1.controlsとしたところでその部分でのエラーは消滅」に対して、「If iPic.Controls.Count > 2 Then」で例外が出たという件、何か Nothing なのか説明してください。


> 少しずつ変えた中突如エラーに陥りバックアップも取っていない中の問題でしたので質問させていただきました。

そうであれば、自分の責任ですので、本来は自分で解決することが筋です。
他者にサンプルの元サイトまで読み込ませて、自分の状況(しかも、開示されている範囲で想像できないもの)に合った助言をさせるのは、回答者側の負担が高いというより、「誰にも答えられない」ものです。

ベストは回答者側に必要な最小限の変更点を示すこと、それができないなら、現状のデザイナーでの階層構造の説明と、ソースコードの提示です。


また、「バックアップを取っていないので戻せない」なら、「少し」ではないということです。
試行錯誤されるのであれば、こまめにバックアップを取りましょう。

引用返信 編集キー/
■86837 / inTopicNo.13)  Re[10]: エラーになる
□投稿者/ FRMC (12回)-(2018/03/25(Sun) 00:08:05)
> その改造の結果、ExPictureBox は1つになっていますか?それとも3つあるままですか?
> 1つになったのなら、iPic なんて使わずに、ExPictureBox1 というフィールド変数をそのまま使うべきです。

Expictureboxは最初から一つだけ存在します。つまり、ipicは使わないほうがいいのでしょうか。

ちなみに、この時点でipicは常にNothing状態です。
サンプルをコピペした時点では、Nothingでもそのまま実行できました。


引用返信 編集キー/
■86838 / inTopicNo.14)  Re[11]: エラーになる
□投稿者/ Azulean (936回)-(2018/03/25(Sun) 00:40:00)
No86837 (FRMC さん) に返信
> Expictureboxは最初から一つだけ存在します。つまり、ipicは使わないほうがいいのでしょうか。

サンプルは複数の ExPictureBox に耐えるように難易度高くしてあるものなので、1つしかないのなら iPic なんて作らずにフィールド変数を使ってください。


> サンプルをコピペした時点では、Nothingでもそのまま実行できました。

あり得ません。何か勘違いされているのでしょう。
引用返信 編集キー/
■86842 / inTopicNo.15)  Re[12]: エラーになる
□投稿者/ FRMC (13回)-(2018/03/25(Sun) 12:12:51)
2018/03/25(Sun) 13:33:46 編集(投稿者)

PC復旧したので解決済み削除
引用返信 編集キー/
■86843 / inTopicNo.16)  Re[12]: エラーになる
□投稿者/ FRMC (14回)-(2018/03/25(Sun) 13:36:15)
> あり得ません。何か勘違いされているのでしょう。

ありえなかったようです。とりあえず現状はこちらの写真でお伝えします。

http://ossiy.net/wp-content/uploads/2018/03/2-1.png

引用返信 編集キー/
■86844 / inTopicNo.17)  Re[13]: エラーになる
□投稿者/ Azulean (939回)-(2018/03/25(Sun) 15:41:35)
No86843 (FRMC さん) に返信
> ありえなかったようです。とりあえず現状はこちらの写真でお伝えします。

Nothing であった場合、iPic.Controls で確実に NullReferenceException が起きるので、「実行できました」というのは観測方法の間違いです。
どうやってそのウォッチを見ているのか知りませんが、きちんと iPic に代入する次の行まで実行したのですか?

関数の最初で止めると、実行されていない部分は Nothing 扱いで表示されるので、それを元に判断しているのなら「観測方法が間違っています」。
引用返信 編集キー/
■86847 / inTopicNo.18)  Re[14]: エラーになる
□投稿者/ FRMC (15回)-(2018/03/26(Mon) 17:37:39)
No86844 (Azulean さん) に返信
> ■No86843 (FRMC さん) に返信
>>ありえなかったようです。とりあえず現状はこちらの写真でお伝えします。
>
> Nothing であった場合、iPic.Controls で確実に NullReferenceException が起きるので、「実行できました」というのは観測方法の間違いです。
> どうやってそのウォッチを見ているのか知りませんが、きちんと iPic に代入する次の行まで実行したのですか?
>
> 関数の最初で止めると、実行されていない部分は Nothing 扱いで表示されるので、それを元に判断しているのなら「観測方法が間違っています」

ウォッチにnothingと書かれていました。
引用返信 編集キー/
■86848 / inTopicNo.19)  Re[15]: エラーになる
□投稿者/ FRMC (16回)-(2018/03/26(Mon) 20:26:57)
皆様、ご回答ありがとうございました。コードを以下のようにすることで、エラーが起きなくなりました。

Dim i As Integer = iLabel.Tag
ExPictureBox1.PointN.RemoveAt(i) '指定した頂点の情報削除
ExPictureBox1.Controls.Remove(iLabel) '指定した頂点の削除
Call 頂点の初期化(ExPictureBox1)
Call 線の描画(ExPictureBox1)

大変、お世話になりました。ありがとうございました。

解決済み
引用返信 編集キー/

このトピックをツリーで一括表示


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

このトピックに書きこむ